首页
社区
课程
招聘
[原创]VC++使用OD反汇编引擎(非BC做DLL或LIB包装)
发表于: 2012-1-27 14:35 8973

[原创]VC++使用OD反汇编引擎(非BC做DLL或LIB包装)

2012-1-27 14:35
8973

这几天一直在用OD调试一带tmd壳程序,断点时而成功时而崩溃,不知何故。侥幸在某次内存访问断点时,找到我要找的代码,于是准备向上追溯直到拿到全局实例的地址。可断点经常崩溃,又不会写OnlyScript,每次修改代码查看堆栈均很麻烦。于是萌生出自己写个反汇编器,打印出某处的反汇编,在需要下断查看堆栈处写一个hook,打印堆栈后还原hook并继续执行。

    首先要解决的是反汇编问题,在网上狂搜,找到OD反汇编引擎,它竟然是开源的,再加上对OD的反汇编出来的文本风格比较熟悉,用它最合适了。(下载地址:http://www.ollydbg.de/disasm.zip)。

    在官网看文档发现,官网只在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++选项里设置后,问题解决。

转载请全文转载并注明出处。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (5)
雪    币: 161
活跃值: (196)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
值得参考,学习了。
2012-1-27 14:49
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习思路。。。。。。
2012-2-8 10:05
0
雪    币: 11
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
大牛~刚好研究这个玩意
2013-5-29 13:22
0
雪    币: 6092
活跃值: (744)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
5
只是反汇编的不是 整个原代码。。
2013-6-17 13:24
0
雪    币: 224
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习之!!!破解之
2018-6-12 11:21
0
游客
登录 | 注册 方可回帖
返回
//