ida、汇编语言、反编译
拜乔布斯
文章中提到的工具或者样本可以到我的资源页面查看。
展开
-
安装及设置MASM32 SDK
使用最新的win10 64位从http://www.masm32.com/下载最新的安装包,就像平时安装应用软件一样安装(一路点击确认,最好是安装在系统盘),记得使用管理员权限哦。程序会生成一个汇编编辑器,可以不选择使用替换ml.exe程序:安装完成之后设置如下环境变量,没有就新建:include项 C:\masm32\includelib项 ...原创 2020-01-03 22:46:57 · 1273 阅读 · 0 评论 -
Windows系统开机启动时间
360的开机启动时间界面从大二开始伴随我们一直到现在,好奇这个时间是怎样获取的,在逆向时遇到Windows的一个API:GetTickCount( ),可以完成这个任务。代码如下:#include<Windows.h>#include<stdio.h>int main(){ DWORD a = GetTickCount(); char Display[100]=...原创 2018-06-14 18:10:19 · 3117 阅读 · 0 评论 -
字符指针定义
逆向时发现汇编代码取得一个标号的地址,但是这个地址对应的值是4个字节的0,后续就没再用过这个值,一直没有想明白作者为什么要这样写(既然是NULL,而且只用一次,直接写NULL不就完了,非要再写一个变量,值是NULL)C的源代码应该是这样:char *ServiceRebootMsg=NULL; 或者 char *ServiceRebootMsg;(应该是作者暂时不用这个字符串,只是懒得删...原创 2018-06-17 11:02:51 · 1551 阅读 · 0 评论 -
带借位的减法指令sbb
先看下面一段一段指令左边的eax值很明显是0,那右边的eax值是多少呢?第一反应应该不是0,否则不会做test判断(经过右边的两次sbb运算eax的值为1或者-1)分析过程:第一种情况cf=11、sbb eax,eax 结果:eax=0xFFFFFFFF(-1) cf=12、sbb eax,0xFFFFFFFF 结果:eax=0xFFFF...原创 2018-07-08 11:20:58 · 4795 阅读 · 0 评论 -
对esp的几种操作方法
在函数的前3行代码常常是下面这种形式1、push ebp2、mov ebp,esp3,sub esp, 0x0C // 为函数栈开辟空间其中1、2行在不保存栈基址的函数中就没有。看下图中的特殊情况:add esp, 0xFFFFFF68 也是为函数栈分配空间,只不过换了另外一种形式。还有一种情况:第4行已经分配了栈空间了,第3行的and(不是add哦)是要干嘛?这个操作是怎...原创 2018-07-08 12:15:47 · 3904 阅读 · 0 评论 -
汇编语言call指令
做逆向分析时经常遇到call指令,常用来调用函数;也可以调用一个过程(少见),最近就遇到一个,如下图:原创 2018-06-26 16:07:48 · 8243 阅读 · 0 评论 -
IDA图形视图
IDA的图形视图在分析程序行为时很方便、很直观。但是会有人为因素在汇编代码中插入数据定义,这段代码就不能创建函数,进而不能使用方便的图形视图。比如下面这个例子:main2标签处,很明显是一个函数,创建函数时给出以下提示:.text:00401518: The function has undefined instruction/data at the specified address.Your ...原创 2018-07-12 17:59:26 · 3669 阅读 · 5 评论 -
IDA设置不常见变量类型
平时使用键盘上的字母"D"键可以方便的设置栈变量、全局变量的类型为:byte、word、dword,但是发现除了这3中类型,其他类型的变量不知道怎么设置。苦思冥想终于找到设置类型的按钮了,如下图: ...原创 2018-10-05 17:12:30 · 2126 阅读 · 1 评论 -
想哭如何解压Zip文件的
突然心血来潮想知道“想哭”是怎样解压资源中的加密Zip文件(密码:WNcry2o17)分别在CreateFileA和CreateFileW处下断点,如下图(取了其中2个文件)起始没啥高大上的方法,就是创建文件。...原创 2018-11-14 15:32:06 · 1071 阅读 · 0 评论 -
shutdown -s -t 0 逆向
记得之前写过Windows关机,先给进程赋予关机权限,再调用ExitWindowsEx关闭计算机。系统自带的shutdown.exe也是调用ExitWindowsEx关机的吗?拿出OD,给参数-s -t 0,直接在ExitWindowsEx处下断点,F9运行,发现电脑关机,断点没有触发,说明不是调用的ExitWindowsEx( )函数。只能一步一步调试了1、在tmain函数中F8执行...原创 2018-12-05 10:24:13 · 6966 阅读 · 0 评论 -
逆向易语言程序
之前逆向了shutdown.exe -s -t 0程序,调试发现是调用InitiateSystemShutdownExW( )函数关闭计算机。就想知道易语言是怎么关闭计算机的,易语言源代码:运行(“shutdown -s -t 0”,假) 在OD中调试,关机代码在0x0040323A和0x00403250两行:问题来了:两行代码之间是通过F7执行的,中间根本没有其他代码,关机代...原创 2018-12-06 18:22:16 · 5767 阅读 · 1 评论 -
PE文件节区名对整个PE文件运行无关紧要
最近找到一个程序,放到Winhex中发现节区表中有UPX0、UPX1节区,相反没有.data、.text于是怀疑是加了UPX的壳,使用PEid等工具查壳,均没有提示加壳。有使用UPX官网的脱壳工具拓壳,依旧提示没有UPX的壳。于是怀疑就是没有加UPX的壳,而是人为修改了节区名,故意误导分析者。思考一下节区从文件加载到内存的过程:是把节区内容加载到指定虚拟内存处,DOS头、NT头、节...原创 2018-12-29 11:56:26 · 506 阅读 · 0 评论 -
两例MFC程序flag获取
先上图:MFC应用程序破解需要找到某个按钮对应的消息处理函数(不能单纯理解成Win32项目,去找自定义的消息处理函数),可以在关键函数处下断点,比如:GetDlgItem( ) GetDlgText( ) SetDlgText( ) GetWindowText( ) SetWindowText( ) RegisterClass( ) CreateWindow( ) Show...原创 2019-01-03 18:22:42 · 427 阅读 · 0 评论 -
CString对象在内存中表示
直接上图:绿框的“ABCDEF”是buffer,上面的红框是buffer长度原创 2019-01-04 15:48:09 · 318 阅读 · 0 评论 -
编译器向GlobalAlloc函数入栈分配内存大小参数
如图:把标号unk_50D800的地址入栈,其实就是0x50D800(通过C语言怎样获取一个汇编中的标号地址),使用一个立即数会不会更好,暂时不明白编译器这样处理的原因。...原创 2018-06-06 09:41:37 · 401 阅读 · 0 评论 -
WannaCry中的switch逆向
直接上图:注意偏移地址0x407F3A的跳转指令:jmp dword ptr ds:[eax*4+0x407F8C]跳转到0x407F8C地址处,如下图:根据eax值的不同,跳转到不同的偏移地址eax=0 或 eax=4 是地址0x00407F41eax=1 是地址0x00407F5Eeax=2 是地址0x00407F...原创 2018-05-23 18:19:01 · 303 阅读 · 0 评论 -
ida逆向:变量、函数标注;反编译代码修改
分析dll文件中的2个函数中变量、函数进行标注,以及反汇编代码修改,(遵循一些约定俗称的规定+自己爱好=形成自己风格)方便以后很快的阅读。函数1:DllEntryPoint()汇编窗口栈窗口反编译窗口函数2:Init1( )汇编窗口没有栈窗口反编译窗口清楚的标注,方便以后快速识别样本如何执行。原创 2018-07-04 09:38:19 · 11274 阅读 · 0 评论 -
IDA数据库快照功能
ida不提供撤销功能:在不确定自己的操作会不会对数据库文件造成意想不到的修改时,可以备份快照。如下图:快捷键Ctrl + Shift + W原创 2018-01-31 14:31:50 · 746 阅读 · 0 评论 -
sp-analysis failed
在使用ida做逆向时发现main2函数底部出现:main2 endp ; sp-analysis failed,刚使用ida打开时main2函数还没有出现栈指针分析失败。估计在分析时不正确的修改致使ida对栈指针分析出错。图如下:一个明显错误的地方就是0X00403C22到0X00403C27处,在调用了firstClass_Init函数(有一个参数)后,栈顶指针还是02C,没有变原创 2018-01-25 09:46:29 · 4136 阅读 · 3 评论 -
不用strlen获取字符串长度的汇编指令
在做逆向工作时发现一段奇怪的汇编指令:lea edi,ebp+0x10;or ecx, 0xFFFFFFFF;xor eax, eax;repne scasb;not ecx;dec ecx;首先edi存储了一个C风格字符串的首地址 ecx=0xFFFFFFFF eax=0 repne scasb; not ecx; dec ecx;指原创 2018-01-25 10:29:13 · 1446 阅读 · 0 评论 -
ida反汇编窗口如何设置函数
先上图:第一行函数注释:一般选用可重复注释,可以在调用该函数处,方便看到关于该函数的注释。第二行函数属性:可在编辑函数对话框中修改,这个属性的额意思是:不返回调用方、基于ebp栈帧。修改如下图:第三行函数声明:默认情况下函数声明是不出现的,在函数声明对话框中做修改就会出现,如图:最后的多行变量规范称呼:栈帧摘要视图,还有一个视图叫栈帧视图显示的更详细。习惯是原创 2018-02-02 12:01:47 · 3601 阅读 · 0 评论 -
查看ida中的函数调用
在一个样本中想要查看一个函数调用了那些函数,有2个办法:1、View->Open subviews->Function calls 显示出函数调用窗口,如下:显示的很详细,而且不冗余。2、点击按钮Display graph of xrefs from current identifier(从当前标识符绘制交叉引用图),下图:这个方法显示的内容有时候会很多,冗余量大,原创 2018-02-06 16:36:10 · 23863 阅读 · 0 评论 -
ida增加断点菜单
最近发现ida的断点功能可以快速转到汇编的某一行代码。对应功能分别是:打开断点窗口 为某一行增加断点 删除某一行的断点在某一行增加断点,如下:在断点窗口显示如下:双击某一行就会转到该行代码处。方便在样本的某个位置做标记,快速定位。如果知道怎样在断点处添加评论,这个断点就更完美了。原创 2018-01-30 12:21:18 · 1094 阅读 · 0 评论 -
IDA对寄存器重命名
IDA可以对寄存器重命名,如下图:可以设置新名称作用范围:起始地址、结束地址好强大的功能原创 2018-02-07 14:03:22 · 972 阅读 · 1 评论 -
根据gethostbyname找样本发出的DNS数据包
如下一段汇编代码:1、调用了gethostbyname,调用之前发现eax寄存器入栈,可以确定这个eax里面的值就是gethostbyname的参数。2、转到偏移10019040处,值是94 91 01 10,如图:切记小端存储,eax的值应该是:0x100191943、转到偏移10019194处,如下图:eax指向的字符串已经很明显了。add eax,0Dh指令,eax指向了"pics.pra...原创 2017-11-29 09:49:32 · 327 阅读 · 0 评论 -
数据代码互相转换
在做逆向时,由于ida不一定能精准识别函数的局部变量,需要自己手动修改栈变量类型(一不小心修改错了,可能影响到栈中的特殊变量s、r,ida又不提供撤销功能,)遇到问题找帮助:ida帮助说栈中的变量可以通过add/delete/define改变,但是s、r两个变量特殊,需要edit funtion命令改变(试过这种方法不通)使用另外一种方法:让ida重新反汇编这一组字节分3步:1、删除当前格式:在该...原创 2018-05-10 12:59:42 · 1178 阅读 · 0 评论 -
函数的2种主要调用方式
2种方式:__cdecl __stdcall相同点:调用方按从右向左的顺序把函数参数放入栈中,导致结果函数的第一个参数始终在栈顶(第一个参数在栈顶,并不意味着:函数访问第二个参数,第一个参数就要出栈,通过内存地址访问)不同点:__cdecl方式的参数数量可变,调用方清楚知道参数个数,按理来说被调用方也知道参数个数,有可能是规定由调用方清理参数(在函数外面add esp,一个参数的时候发现编...原创 2018-07-04 09:17:33 · 1434 阅读 · 0 评论 -
布尔表达式赋值操作对应的汇编代码
直接上代码了观察代码的0x004011E4至0x004011F01 call ds:RegQueryValueExA2 mov esi, eax3 neg esi # esi=0-esi cf位受影响4 sbb esi, esi # esi=...原创 2018-05-11 16:58:42 · 800 阅读 · 0 评论 -
FindResourceA( )函数
样本使用FindResourceA( )查找资源,类型是"XIA",名称2058,在MSDN里面怎么也找不到类型是"XIA"的资源,后来使用Resource Hacker打开样本有如下信息:还真有类型"XIA"(资源前两个字节是PK,ZIP压缩文件)调用完FindResourceA( )还会有如下的一系列调用:hMoule=FindResourceA( NULL, 2058, ...原创 2018-05-14 14:13:42 · 5136 阅读 · 3 评论 -
__p__argc( )、__p__argv( )库函数
这两个函数都在msvcrt.dll动态链接库中,贴出汇编代码:这两个函数都没有参数,分别返回__argc、__argv变量,这两个变量定义如下:长度4字节,值为0。暂时不知道这两个函数作用,不过可以猜到和main函数参数脱不了干系。在样本的汇编代码中发现有明显的调用__p__argc( )、__p__argv( )函数(暂不清楚是作者主动写的,还是编译器加上)使用ollydgb调试__p__arg...原创 2018-05-14 14:39:05 · 1237 阅读 · 0 评论