edx

[安全攻防进阶篇] 六.逆向分析之OllyDbg逆向CrackMe01-02及加壳判断 (6)

梦想与她 提交于 2020-08-11 08:25:41
前文作者讲解了OllyDbg和在线沙箱的逆向分析过程,分享了恶意软件如何通过宏脚本发送勒索信息或密码至用户邮箱。这篇文件将带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原,基础性文章,希望对您有所帮助。技术路上哪有享乐,为了提升安全能力,别抱怨,干就对了, 从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵! 接下来我将开启新的安全系列,叫“安全攻防进阶篇”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~ 推荐前文: 网络安全自学篇系列-100篇 话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,也强烈推荐大家去看看钱老师的视频,加油~ 文章目录 一.OllyDbg基础用法 二.CrackMe01 1.题目描述 2.逆向分析 3.原理分享及序列号提取 三.CrackMe02 1

[转] 栈,堆,全局区,常量区

不打扰是莪最后的温柔 提交于 2020-08-10 14:43:24
转自 https://blog.csdn.net/daiyutage/article/details/8605580 一、静态存储区和常量存储区的区别:??? 1、静态存储区,全局变量和静态变量被分配到同一块内存中;常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,是不允许修改的。 2、静态存储是main函数运行前分配内存并初始化;常量存储是固化在执行文件上的数据。栈的方向和平台有关,一般来说,windows由高地址向低地址增长,linux相反,但linux演变出来的操作系统不排除有特殊情况。 3、常量存储区里面的数据是放在代码段里的,不占内存。静态存储区是在内存空间中的,在其所属的类(或文件)中是全局的 字符串常量,放在哪个存储区呢?是“自动存储区”还是“静态存储区”中? 比如: char *pstr="hello world!"; 这里,"hello world!"是一个字符串常量, pstr是在栈中的变量。 我想问,字符串常量,在哪个内存区域分配空间呢? 好像应该不是在“栈区“分配空间吧!!! 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放

双色球 脱壳加去效验

北慕城南 提交于 2020-08-10 13:31:18
【破文标题】双色球 脱壳加去效验 BY lvcaolhx 【破文作者】lvcaolhx 【作者邮箱】 [email]hafiwu@sohu.com[/email] 【作者主页】lvcaolhx.blog.51cto.com 【破解工具】OD/PEID 【破解平台】XPsp2 【软件名称】双色球 【软件大小】 【原版下载】自己到网上搜索 【保护方式】 【软件简介】 【破解声明】菜鸟破解,无技术可言! ------------------------------------------------------------------------ 破解过程】一、查壳,为ASProtect 2.1x SKE -> Alexey Solodovnikov, 用OD载入,运行Asprotect.V2.X.UnpacKer.V1.0E.By.Volx.oSc脚本脱壳, 查看脚本窗口,发现修复所用的相关数据: OEP 的相对地址 = 00003938, IAT 的相对地址 = 00001000 IAT 的大小 =000000394 , Import Fix 1.6载入,输入上面数据进行修复 运行后提示:文件数据损坏!有自效验 二、去自效验。OD载入修复后的文件,下bp rtcFileLen断点,运行,F8后返回到: 004C93CB . FF15 D4B25300 call dword ptr

如何把shellcode转换成exe文件分析

霸气de小男生 提交于 2020-08-10 06:47:27
【转】 http://www.freebuf.com/articles/web/152879.html 前言 在分析 shellcode 时,静态分析或者使用 scdbg 模拟分析都不够准确,如果转换成 exe 文件那么就可以用 debugger 或者 IDA 分析,会方便很多。 样本分析 这里以 CVE-2013-3346 的样本为例,使用 peepdf 分析样本: $ python peepdf.py -i -f ~/Downloads/sample.pdf File: sample.pdfMD5: 6776bda19a3a8ed4c2870c34279dbaa9SHA1: ad6a3564e125683a791ee98c5d1e66e1d9c6877dSize: 177511 bytesVersion: 1.1Binary: FalseLinearized: FalseEncrypted: FalseUpdates: 0Objects: 4Streams: 2Comments: 0Errors: 1Version 0:Catalog: 1Info: No Objects (4): [1, 2, 3, 10] Errors (1): [3] Streams (2): [10, 3] Encoded (0): [] Objects with JS code (1): [3]

简单shellcode学习

时光毁灭记忆、已成空白 提交于 2020-08-09 06:40:57
本文由“合天智汇”公众号首发 作者:hope 引言 之前遇到没开启 NX 保护的时候,都是直接用 pwtools 库里的 shellcode 一把梭,也不太懂 shellcode 代码具体做了些什么,遇到了几道不能一把梭的题目,简单学习一下 shellcode 的编写。 前置知识 NX (堆栈不可执行)保护 shellcode(一段16进制的数据,转化为字符串则为汇编代码) pwnable之start 保护检测 可以看到这道题目什么保护都没有开 ida分析 题目只有 start 函数,可以知道该题是用汇编语言写的,顺便可以锻炼一下自己看汇编的能力 汇编代码分析 简单来说,程序调用了 wirte 函数去打印字符,接着调用 read 函数输入,但是这里的输入没有限制,因此有一个栈溢出的漏洞,而且程序有个特定,他将 esp 的值首先压入了栈中, esp 存的是栈顶的地址,使得我们能够找到栈的地址,为我们返回 shellcode 做准备 push esp #将esp寄存器的值压入栈中,这里可以获得栈的地址 push offset _exit #将_exit函数地址压入栈中,使得start函数执行完毕时返回exit函数 xor eax, eax #清空eax寄存器的值 xor ebx, ebx #清空ebx寄存器的值 xor ecx, ecx #清空ecx寄存器的值 xor edx, edx

[C++]基础题目总结

半腔热情 提交于 2020-08-08 12:38:51
C++期末复习 一、选择题考察的知识点(40分) C++在C的基础上多了什么新特性 类和对象 继承 多态、虚函数和RTT1(运行阶段类型识别) 函数重载 引用变量 泛型(独立于类型的)编程,这种技术是由模版和标准模版库(STL)提供的 处理错误条件的异常机制 管理函数、类和变量名的名称空间 编写C++程序的步骤 1、用C++语言编写程序 用高级语言编写的程序称为“源程序”(source program)。C++的源程序是以.cpp作为后缀的(cpp是c plus plus 的缩写)。 2、对源程序进行编译 为了使计算机能执行高级语言源程序,必须先用一种称为“编译器(complier)”的软件(也称编译程序或编译系统),把源程序翻译成二进制形式的“目标程序(object program)”。 编译是以源程序文件为单位分别编译的。目标程序一般以.obj或.o作为后缀(object 的缩写)。编译的作用是对源程序进行词法检查和语法检查。编译时对文件中的全部内容进行检查,编译结束后会显示出所有的编译出错信息。一般编译系统给出的出错信息分为两种,一种是错误(error);一种是警告(warning) 。 3、将目标文件连接 在改正所有的错误并全部通过编译后,得到一个或多个目标文件。此时要用系统提供的“连接程序(linker)

[安全攻防进阶篇] 六.逆向分析之OllyDbg逆向CrackMe01-02及加壳判断 (6)

余生长醉 提交于 2020-08-08 03:58:13
前文作者讲解了OllyDbg和在线沙箱的逆向分析过程,分享了恶意软件如何通过宏脚本发送勒索信息或密码至用户邮箱。这篇文件将带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原,基础性文章,希望对您有所帮助。技术路上哪有享乐,为了提升安全能力,别抱怨,干就对了, 从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵! 接下来我将开启新的安全系列,叫“安全攻防进阶篇”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~ 推荐前文: 网络安全自学篇系列-100篇 话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,也强烈推荐大家去看看钱老师的视频,加油~ 文章目录 一.OllyDbg基础用法 二.CrackMe01 1.题目描述 2.逆向分析 3.原理分享及序列号提取 三.CrackMe02 1

[娜璋带你读论文] (03) 清华张超老师

耗尽温柔 提交于 2020-08-07 08:09:57
数据流敏感的漏洞挖掘方法 Discover Vulnerabilities with Flow Sensitive Fuzzing Chao Zhang 清华大学 2nd International Workshop on Cyber Security and Data Privacy 《秀璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期待与您前行,加油~ 张超老师是我非常佩服的一位青年教师, 清华大学副教授(博导),蓝莲花战队教练,我也听了好几次他的讲座,受益匪浅。他主要研究软件和系统安全,尤其是智能攻防方向,在国际四大安全会议发表论文十余篇。在自动攻防研究方面,提出的漏洞挖掘方案发现300多个未知漏洞,多次参加DARPA CGC、微软BlueHat、Defcon CTF防夺旗赛等比赛并获奖。作者主要分享他的两次报告,第一篇是学术论文相关的“数据流敏感的漏洞挖掘方法”,第二篇是安全攻防实战相关的“智能软件漏洞攻防”。这些大佬是真的值得我们去学习,献上小弟的膝盖~fighting! PS:顺便问一句,你们喜欢这种方式的分享吗? 担心效果不好,如果不好我就不分享和总结类似的会议知识了,欢迎评论给我留言。 文章目录 一.传统的漏洞挖掘方法 1

直接在x86硬件上显示图片(无os)

对着背影说爱祢 提交于 2020-07-28 08:25:09
1 任务   为了学习计算机底层和os,我给自己布置了一个任务:在x86硬件上,使用c和nasm来显示一张bmp图片。完成这个任务,前后估计花了2个月的业余时间。   这个任务涉及了很多知识点,包括:启动区、保护模式、nasm汇编、c和nasm汇编互调、ld链接、硬盘io读取、显卡调色板模式、bmp图片格式、bios中断指令、c指针操作内存、borch虚拟机、binutils工具集、makefile等。 2 环境 ubuntu borchs nasm和 c PS: c代码遵循google的C++ 风格指南,使用gnu99标准 。 3步骤 3.1 生成一个10M的硬盘镜像   bximage是borchs软件包的一个小工具,可以用于生成硬盘或软盘镜像。打开终端,输入:bximage。按照如下图所示的,一步一步地操作。 最终会在当前目录下,生成一个名为10M.img的文件。 3.2 准备一张320*200的bmp图片   为简单起见,屏幕的分辨率使用320*200。因此我们的bmp图片的大小320*200。我准备了一张图片,如下,这是我家主子的靓照。   将文件命名为cat-666.bmp,然后写入到#201扇区 dd if =src/cat-ham.bmp of=10M.img bs=512 seek=201 conv=notrunc 3.3 引导区   引导区位于启动盘的#0扇区

free(): invalid pointer Aborted (core dumped) cs50

拜拜、爱过 提交于 2020-06-01 07:37:09
问题 I'm having problem with substitution cipher that I can't figure out my code functions correctly but it prints extra exclamation mark at the end of my ciphertext here is my important part of the code int keylen = strlen(argv[1]); string key = argv[1]; printf("ciphertext: "); for (int i = 0; i < keylen; i++) { //if it is a lower character we remove the value of a //to make it the letters start form 0 if (islower(plaintext[i])) { int x = plaintext[i] - 'a'; printf("%c", tolower(key[x])); } //