-
-
[原创]VC++使用OD反汇编引擎(非BC做DLL或LIB包装)
-
发表于:
2012-1-27 14:35
9155
-
[原创]VC++使用OD反汇编引擎(非BC做DLL或LIB包装)
这几天一直在用OD调试一带tmd壳程序,断点时而成功时而崩溃,不知何故。侥幸在某次内存访问断点时,找到我要找的代码,于是准备向上追溯直到拿到全局实例的地址。可断点经常崩溃,又不会写OnlyScript,每次修改代码查看堆栈均很麻烦。于是萌生出自己写个反汇编器,打印出某处的反汇编,在需要下断查看堆栈处写一个hook,打印堆栈后还原hook并继续执行。
首先要解决的是反汇编问题,在网上狂搜,找到OD反汇编引擎,它竟然是开源的,再加上对OD的反汇编出来的文本风格比较熟悉,用它最合适了。(下载地址:7baK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3!0D9L8s2W2V1j5X3N6Q4x3X3g2V1k6g2)9J5c8X3c8A6M7$3q4K6L8g2)9J5k6i4A6A6M7q4!0q4c8W2!0n7b7#2)9^5z5g2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
在官网看文档发现,官网只在BC和gcc下编译过,没有测试过VC是否能编译。用VC编译,提示缺少头文件<dir.h>。直接注释掉缺少的头文件,再次编译报告找不到pow10l库函数。
再次在网上找资料,无果,试图用BC编译成LIB,在VC中引用,可LIB格式不一致,仍不行。退而求其次,准备编译成DLL动态引用,可引擎是C写的使用了多个全局变量,这个封装以后要调整就麻烦了。于是决定继续试试用VC编译。
在网上查pow10l,发现原来只是以10为底的幂函数即10的n次方,于是换成pow(10,N),编译通过,测试程序正常。
(在assembl.c文件中把:floating*=pow10l(decimal*base);改为:floating*=pow(10,decimal*base);)
在使用过程中还发现一个问题,打印输出的OpCode总是莫名其妙多出很多FF,后来**C多次调试对比后才发现,VS2008默认的char是有符号的,而BC的char默认是无符号的。在项目属性C++选项里设置后,问题解决。
转载请全文转载并注明出处。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课