logo资料库

一些反汇编操作的经验.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
最近要做驱动程序,需要用到反汇编。在网上收集了一些资料,了解到一些常用工具名称,一些反 汇编操作的经验总结,有一篇文章说 QQ 大厅多开的破解,很有意思。看起来最简单了,我也试 验一下,拿我很喜欢的小游戏《宝石迷阵》做实验。打这个游戏当年我还创造了 13 万的高分,至今 没有人能超越。前几天也是拿他作查找/修改内存试验,效果很不错。 //2006-10-3 这几天收集整理了大批的反汇编工具,有 Cheat engine, Ollydbg, PE Explorer,IDA Pro, W32ASM。 IDA 不能用,老是说过期了。 Cheat Engine 是修改游戏内存的工具,反汇编用不上。不过还是很好玩的工具,和我写的程序效果 差不多,可以不断检索,很快找到内存位置。今后可能要通过程序动态检索修改内存,所以这样的 工具我不会下功夫继续做下去。 Ollydbg 很好用,正在掌握中。 W32ASM 和 Ollydbg 差不多,只是界面、代码看着更整洁一些。 //2008-10-6 HMODULE hModule = GetModuleHandleA(appName); if(hModule == 5A4D) { ecx = hModule+3C; exc += eax; if(ecx == 4550) { eax = } } 用 Ollydbg 做跟踪, 开两次游戏, 004AB9BF . /74 1F JE SHORT WinBej.004AB9E0 跳转到 004AB9E0 > \8379 74 0E CMP DWORD PTR DS:[ECX+74],0E
在这里 004ABA91 . F645 C8 01 TEST BYTE PTR SS:[EBP-38],1 进行测试,是否有一个句柄。 发出 ZwRaiseException 后退出游戏。 CPU Disasm Address Hex dump Command Comments 004AB9FE |. /75 08 JNE SHORT 004ABA08 CPU Disasm Address Hex dump Command Comments 004ABA0F |. /75 08 JNE SHORT 004ABA19 这里是发生跳转的点 //2008-10-8 CreateMutexA 昨晚在看雪论坛下载到一个可用的 IDA,他也是反汇编好工具。 早上安装使用,发觉他有一个优点,可以用图形的方式列出过程,子过程也可以建立新窗口查看。 从起点 PUSH 60H 开始跟,记录下每一次进入的子过程的地址。 多开 - 路径 004AB97F - 004AB98D - 004AB9A9 - 004AB9B6 - 004AB9E0 - 004AB9E6 - 004AB9EE - 004AB9F4 - 004ABA08 - 004ABA19 - 004ABA32 - 004ABA58 - 004ABA69 - 004ABA7C - 004ABA97 - 004ABAA0 - 004ABAA6 - 跳转 Over 单开 - 路径 004AB97F - 004AB98D - 004AB9A9 - 004AB9B6 - 004AB9E0 - 004AB9E6 - 004AB9EE - 004AB9F4 - 004ABA08 - 004ABA19 - 004ABA32 - 004ABA58 -
004ABA69 - 004ABA7C - 004ABA97 - 004ABAA0 - 004ABAA9 call sub_40BA8C 启动程序 经过前几天的努力,感觉前面不会是问题所在,因为运行过程一模一样,感觉 sub_40BA8C 里面有原因。 用新的窗口打开这个子过程。又打开了几个以后,突然出现了很多很多代码,我想这里是 InitApp 的主体吧。在里面找寻了一会,看到 CreateMutexA 函数。它下面有一句 Cmp eax, 0B7h 估计是检查 创建结果,用 VC 的错误查询器查看 0B7h,是"当文件已存在时,无法创建该文件"。这样的错误很明显 说明 Mutex 已经存在,无法继续创建。得,这就是问题的原因了。 sub-40BA8C - 跟踪 441047 call ds:CreateMutexA 创建互斥矩阵 44105D cmp eax, 0B7h 创建失败 GetLastError() == 0xB7 183(0xB7)错误,当文件已存在时,无法创建该文件。 441062 jnz short loc_441082 eax - 0B7h != 0 则跳转 再用 Olldbg 启动游戏,在 44105D 处修改一下错误代码,0B7h 改为 0B6h,继续运行,多开运行成功。 总结一下: 用 Olldbg 很多天都找不到问题的原因,是因为用 OD 我一直在 main 函数里面打转转,根本没有进入到 真正初始化的函数里面,原因是程序的跳转太多了,很难一个一个子程序都进入,进入多了以后自 己都不知道转到了哪里。而且 OD 所有过程在一个文件里面,看着容易糊涂。 IDA 的过程方式用图表,子过程又在新的窗口里面,很清楚下面去了哪里。很容易就找到目标。用 OD 5 天没有解决的问题,IDA 半天就连学带用掌握了。 OD 查询函数很麻烦,用了那么久依然不熟练。IDA 修改汇编命令我还没学,只知道 OD 可以一边运行 一边修改指令。 W32ASM 查询很容易,但是和 OD 一样很难一次看清楚所有的子程序。 我想以后我会更喜欢 IDA 的,至少今天只用了半天就通过它搞好了事情。接下来多多熟悉 IDA,掌握 更多操作方式。过几天学多了,我把经验继续贴进来。
分享到:
收藏