工控编程吧
标题:
OD反编译工具学习笔记
[打印本页]
作者:
qq263946146
时间:
2019-3-19 21:50
标题:
OD反编译工具学习笔记
偶然间接触发反编译方面知识,学习学习,做个笔记。
相关资源网络很多,总的感觉是OD是一个民间流传与使用很广的反汇编工具。
但并不是一个很正规的软件。
有不正规的感觉主要有一些原因
1.新手使用时,一些功能在软件界面界面菜单栏,工具栏,鼠标 右键等都找不到,只能从视频中知道快捷键。操作上非常不友好。
2.插件都不网络 牛人开发集成,未经完全测试,导致OD经常异常关闭。
3.官网图片缺失过多,感觉是要关闭。非盈利也可理解。
不管怎样,软件流行受喜欢,说明软件 还是很实用。
这里记录下学习要点经典,方便自己复习。
教程1
20分钟时长,介绍OLLY DBG 程序界面,快捷键。如何修改HELLOWORLD 程序窗口标题与内容。
1. 逆向分析分:动态,静态。
动态分析:加载并运行被分析程序,工具OllyDbg;
静态分析:不运行被分析程序,直接分析程序二进制代码,适用病毒等无法运行的程序工具IDA Pro
2. OLLYDGB 根目录UDD保存程序调试信息,可清空。
3. 找CALL.
一直按F8弹出对话框,上断点,重载入程序后进入断点内部。
一直按F8,边观察,找到MESSAGEBOX处,进而修改此函数相关信息.
在数据窗口ctr+g 查找Messagebox参数对应的地址,修改地址内容,鼠标右键,二进制,编辑。
4. 保存修改结果为EXE.鼠标在汇编窗口或数据窗口右键,保存为可执行程序,
弹出窗口上鼠标右键,备份,保存数据到文件。
教程2
39分钟。演示通过F8,+CTR+F8找CALL,
修改cmp 与 jz部分代码,保存后实现爆破。
1汇编窗口含4个部分,
虚拟地址,同一程序同一指令同在不同系统相同。
机器码,为CPU执行的机器代码以16进制形式显示。
汇编指令,机器码对应的程序代码。
2.alt+b断点编辑窗口,或工具栏上B图标
3.ctl+g转到表达式,例可搜索getdlgitemtext,提示未知标识符表示未找到
4.ctl+f9执行到函数return位置。在菜单,调试下可看到
5.任何函数在汇编里,约定,返回值存于eax内;
6.寄存器窗口双击标志位,可修改值。Z零标志位;
7.汇编窗口双击或空格或鼠标右键,汇编可修改代码.
8.处在DLL领空按alt+f9返回程序领空;
9.CTRL+N打开导入表窗口查看程序导入的全部函数,在窗口上直接输入函数可查找,在找到函数上鼠标右键,可下断点或删除断点。单步运行程序,推断找CALL
教程3
18+15+
逆向所需要的汇编的基础知识,寄存器,栈,指令讲解
5个可毕随意使用-》
EAX:扩展累加器寄存器;
EBX:……基址
ECX:…计数
EDX:….数据
ESI:….来源
EDI:…目标
3个指定目的使用-》
EBP:主要用于栈及栈帧;
ESP:指向当前进程栈空间地址
EIP:总是指向下一条要被执行的指令
Call xxx;等于 pusheip;然后 jmp xxx;有四种表现形式
Call 404000h 直接跳到函数或过程地址
Call eax 函数或过程地址存放于eax
Call dword ptr [eax] 函数地址存放于eax内值中。如eax=0x808000h,404000h存于它
Call dword ptr[eax+5], 如eax=0x808000h,404000h存于0x808000h+0x5h
Call dword ptr <&API> 执行系统API
Mov dest,src src 存入dest;
MOVS,MOVSB,MOVSW,MOVSD EDI,ESI;
MOVSX,MOVZX,byte->word,高位填1,0; 然后mov;
Cmp dest ,src; src-dest,设置C/O/Z标志位,zero,overflow,carry flag;
Cmp eax,edx
Cmp eax [404000];
Test dest,src; src &dest; 设置C/O/Z标志位,zero,overflow,carry flag;
实际表示形式为 test eax,eax; eax==0,z==1;
Ja cf==0 && zf==0
Jb cf ==1
Je zf==1
Jg zf==0 && sf == of
Jge sf == of
Jl sf != of
Jle zf==1&&sf!=of
Jmp 无条件跳转;
Jne zf==0
F4 运行到鼠标选中行
教程4
29分钟
去除NAG窗口的几种方法
1. 修改跳转指令,2.或用NOP填充NAG代码,3.修改NAG代码函数,使其无效。
PE(Portable executable,用于指导系统如何执行exe程序;
PE文件在硬盘与载入内存时,其存储结构相同,但内容会有所删减
PE文件包含:DOSHeader,DOS Stub,PF File Header,Image Optonal Header Section table
Data directories,sections(区块或节区是程序的真正内容),其余仅是让系统知晓如何加载
节区内容。小甲鱼<解密系列>
PE文件头的地址为其地址,之后的节区地址为程序代码开始的地址 ;
2. 内存分布窗口,M图标进入;找到PE文件头,双击进入数据窗口,窗口内
从上到下有注释,分别为DOS文件头(为兼容DOS程序)
PE File(PE的开始)。在注释栏下拖动找到ADDRESSOFENTRYPOINT为程序的入口地址
修改其地址值就可修改程序入口地址;
VA virtual address 载入内存的虚拟地址
RVA relative virtual address 相对虚拟地址,相对VA的偏移量
EP entry point 程序入口 地址
教程5
17分钟
通过修改PE信息,实现破解。
图标M进入内容分布窗口,双击PE头文件,进入数据窗口修改相应PE
信息。修改结果的保存得工具栏图标C,进入CPU窗口,保存。
具体为定位修改内容的地址。鼠标框选范围,进行保存
教程6
27分钟
实战逆向PixtopianBook.EXE,
程序异常处理:shift+F9 或工具栏,调试选项,异常,全勾选
同时忽略以下指定的异常范围000000-FFFFFFFF
1.通过模态对话框找CALL;
程序触发模态对话后,在OD点击暂停(会进入DLL领空),再执行到用户代码(ALT+F9),结束对话框后,OD会进入用户代码(程序领空),单步执行找call.
2.通过字符串找CALL
进入内存窗口,工具栏图标M进入。CTRL+B或鼠标右键,查找字符串。用ASCII,或UNICODE不同方式查找。找到会弹出数据窗口,修改之;返回CPU窗口,搜索对应地址进行保存。
3.通过查看地址参考找CALL
在CPU窗口数据区选择地址(CTRL+G转到)后,CTRL+R或鼠标右键,进行查找参考。有结果,双击定位后找CALL.
教程7
22 + 15 分钟
通过硬件断点,找CALL实现程序爆破。
可变跳转找CALL
JMP EAX,修改EAX值实现跳转。
1.硬件断点找CALL
Int3为中断指令。CPU执行此指令时,OD获得控制权。
2.软件断点F2添加的断点,只能在OD的CPU界面添加,
在数据段,指令中间下不了。
3.硬件断点在DLL中使用,执行到DLL领空后,鼠标右键
断点,硬件执行,下硬断点。菜单,调试,硬件断点,操作断点。
4.通过打开堆栈窗口,查找程序调用函数记录。
在程序对话框弹出后,OD暂停后会停在DLL领空,打开堆栈窗口(图标K),
查看程序运行到当时状态,被调用函数记录。双击“调用来自“定位CALL.
5.实用但体力找CALL法—对比法。
初次运行程序记录关键CALL跳转状态,
试用后的软件,再次运行记录CALL跳转状态,对比。
教程8
20分钟
1.通过文本字串参考窗口找CALL,
CPU窗口,鼠标右键,查找,所有字串文本, 或工具栏图标R
打开窗口。确保运行在程序领空。
在窗口中鼠标右键查找,双击查找结果进入指令位置找CALL。
2.CPU窗口,信息区,鼠标右键,数据窗口中跟随数值,查看值。
3.CPU窗口,汇编区,鼠标右键,查找参考,地址常量,罗列指定地址所有语句段;
教程9
21分钟
1.在CALL位置,回车,可进行查看函数代码,但并未执行CALL语句;
教程10
20分钟
VB程序逆向
1. VB类程序变量类型
变量类型:_vbaVarCompEq,vbaVarCompLe,vbaVarCompLt,
vbaVarCompGe,vbaVarCompGt,vbaVarCompNe,vbaVarTstEq,vbaVarTstNe,
字符串类型:_vbaStrCmp,vbaStrCmp,vbaStrCompVar,vbaStrLike,vbaStrTextComp
VbaStrTextLike.
2. 通过查找以上关键字找CALL
CPU窗口,ctrl+n打开输入输出窗口,在窗口上直接输入内容查找函数,如vbaVarTstEq。
在查找到的函数上鼠标右键,在每个参考上设置断点。
教程11
23分钟,
CPU窗口,鼠标右键,查找,查找所有参考,
弹出窗口定位到第一行,鼠标右键,查找文本
选中汇编语句,在信息栏可以看到相关信息,如本地调用 来自 (选中鼠标右键可跳转,后再按enter,可跳回)
教程12
26分钟
1.CPU窗口选中命令,鼠标右键,查找参考,选定命令,可查找指令被调用的所有位置
2.Push +retn 实现jmp功能。
3.按- 返回动态库之前的程序领空,按+ 又回去;
教程13 无
教程14 无
教程15
32分钟
内嵌补丁
CPU区域最尾预空留代码处可修改为有用代码,跳转到修改的代码再跳回去。
教程16无
教程17 内嵌补丁
1. 在PE数据段定义片段作为变量使用:工具栏M,进入内存映射窗口,双击数据段.data进入数据窗口,定位到末尾,选择未使用的地址使用如5712c0; 下断点运行程序检查是否真为未作用断点,鼠标右键,断点,硬件写入,Byte或其他。
2.在CPU区域记录要插入代码地址如401C3D
3.在CPU区域底部选择未使用地址如525070插入代码实现inlinePatch.
4.使用插件NONAWRITE,编写代码例如:
0x525070://为要插入的地方
inc byte ptr[5712C0]
cmp byte ptr[5712C0],1
jnz
点击汇编,完成。
5.在CPU区域某处插入jmp 525070 实现代码调用;
教程18
21分钟,
通过exeScope工具查看程序对话框句柄例如0x123。
在CPU区域里查找 push0x123找CALL.
教程19 无
教程20
35分钟,
Ecx 约定为循环计数器
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4