170410 汇编-ret和call,OD-基本操作

1625-5 王子昂 总结《2017年4月10日》 【连续第191天总结】

A. 汇编语言 第十章 70%

OlleyDbg 基本操作

B. ret指令用栈中的数据修改IP的内容,从而实现近转移。相当于pop IP

retf指令用栈中的数据修改CS和IP的内容,从而实现远转移。相当于pop IP pop CS

call指令将当前的IP或CS和IP压入栈中,然后转移

call不能实现短转移,除此以外和jmp指令相同

当使用call 标号时,将当前的IP--注意:是call的下一个指令的IP(因为执行call前,IP就已经+3了)送入栈中

call+reg、call+内存地址(需使用word ptr/dword ptr注明长度)都跟jmp相同,只是要在跳转前将IP/CS和IP压入栈中


OD编译时优化选项按默认设置为Maximize speed。也可以按MinimizeSize优化选项编译一下进行比较,因为选项不同生成的汇编代码也会有所不同。

拆解一个Windows程序要比拆解一个DOS程序容易得多,因为在WIndows中,只要API函数被使用,想对寻找蛛丝马迹的人隐藏东西是比较困难的。因此分析一个程序,用什么API函数作为切入点就显得比较关键了。

一个TraceMe的序列号验证流程为:将姓名与序列号输入到文字框中,程序调用GetDlgItemTextA函数把字符读出来,然后进行计算,最后用函数lstrcmp进行比较。因此,这些调用的函数就是解密跟踪的目标,用这些函数作为断点,跟踪程序的序列号验证过程就能找出正确的序列号。

为了能让OD中断在程序的入口点,加载程序前必须要设置一下。调试选项配置对话框中,对Event标签里进行配置OD对中断入口点、模块加载、卸载、线程创建结束等事件的处理,一般调试只需要将暂停点设置在Entry point of main module 或WinMain即可。

System breakpoint:系统断点,OD用CreateProcessA加载DEBUG_ONLY_THIS_PROCESS参数执行,程序运行之后会触发一个INT3,在系统空间里

Entry point of main module:主模块的入口点,即文件的入口点

WinMain:程序的WinMain()函数入口点,即使设置这个选项,OD一般也只会中断在文件入口点处。

设置好后,打开程序。此时OD会中断在入口点,光标停在4013A0这行,即入口地址。

Ctrl+G可以直接查找源码中调用函数的位置,通过双击/F2可下断点

Alt+B可以打开断点窗口,对所有断点进行管理(暂停、恢复等等)

也可以通过Ctrl+N打开输入表,发现函数后按Enter或右键菜单执行Find references to import命令打开调用此函数的参考代码窗口,找到相应的代码

按Alt+F9回到调用函数的地方,也可以F8单步走出函数。

API函数基本采用的是__stdcall调用约定,即函数入口参数按从左到右的顺序入栈,并由被调用者清理栈中参数,返回值放在eax寄存器中。

观察内存可发现输入的字符,通过修改寄存器可以取消判断,或者让判断失效来达到爆破的目的

完成后可写入磁盘修改文件

C. 明日计划

汇编语言第十章

OD基本操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值