打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
原创:使用OllyDbg ResHack LordPE来修改EXE文件

原创:使用OllyDbg+ResHack+LordPE来修改EXE文件

2006-10-12 04:21阅读:

使用OllyDbg+ResHack+LordPE来修改EXE文件
作者:Tigers (中国乐器网站长)
买来的软件要经过加工改造才能符合自己的要求,不知道大家有没有相同的经历,没有源码,而且VC7编译过的程序反汇编很难读懂。好在经过几夜的调试和分析,终于解决了困扰我很久的难题,把自已的经验写出来,和大家分享一下。:)好有成就感 (:
难题一:视频在线软件如QQ聊天室(举例,我做的不是这个,项目是中国乐器网视频教学系统,请访问http://vod.yueqi.com)如何向一个WEB服务器发信息?用来在聊天的同时更新网页的内容,如在线人数?我的思路是这样子的:
1、首先是找出软件中存放在线人数的地址,我偷懒用金山游侠,通过进进出出改变人数,终于找出了在线人数放在ds:4EBF20。
2、在软件中用Ollydbg找到更新人数的程序段,然后jmp比较空的地址,填上自己的调用代码(代码的写法可以自己写个子程序调用,编译后查看汇编代码就行了)。
00428D62 . /E9 43100800 JMP 004A9DAA 后面的地址是我找到的空白地方,来填写自己的代码。
004A9DAA > \50 PUSH EAX
004A9DAB . 51 PUSH ECX
004A9DAC . 52 PUSH EDX
004A9DAD . 53 PUSH EBX
004A9DAE . 54 PUSH ESP
004A9DAF . 56 PUSH ESI
004A9DB0 . 57 PUSH EDI
上面一段把所有寄存器压栈,别把人家原来的程序搞坏了。
004A9DB1 . FF35 94687700 PUSH DWORD PTR DS:[776894];是不是主持人
004A9DB7 . FF35 20
加载中...
内容加载失败,点击此处重试
加载全文
BF4E00 PUSH DWORD PTR DS:[4EBF20];人数
004A9DBD . FF35 84687700 PUSH DWORD PTR DS:[776884];聊天室号码
004A9DC3 > FF15 1B808A00 CALL DWORD PTR DS:[10F225];
&web.?myweb@@YAXHHH@>调用子程序myweb,这个地址要用下面的方法得到。
004A9DC6 > 5F POP EDI
004A9DC7 . 5E POP ESI
004A9DC8 . 5C POP ESP
004A9DC9 . 5B POP EBX
004A9DCA . 5A POP EDX
004A9DCB . 59 POP ECX
004A9DCC . 58 POP EAX
调用完了恢复所有的寄存器。
004A9DCD . C3 RETN
结束,返回原来的程序。
3、编写自己的子程序myWeb,用http访问网页来提交这几个数据。
DLL_API void myweb(int roomid,int count,int master)
{
char* url;
static long i=1;
url=new char[60];
static int dllflag=0;
DWORD dwThreadId;
TCHAR szHello[100];
HWND hWndPrevious;
static int _count=100;
if (count!=_count){
_count=count;//增加一个静态变量计数,因为有时网址相同的话,系统会从缓存中找页面,而不再向服务器提交数据,所以这样可保证每次都能向服务器提交数据(原来有时程序提交,有时不工作,原来是页面缓存机制干扰了我)。
sprintf( url, 'http://vod.yueqi.com/uproom.asp?i=%d&c=%d&seed=%d',roomid,count,i);
//把数据放到网址中
i++;
::OleInitialize(NULL);//Ole可能是异步吧?先保证主程序工作,别在这里停下。
loadUrl(url);//这个函数是VC访问HTTP页面的,返回的内容处理很复杂,这里只是提交数据,所以不用写内容处理程序了。
::OleUninitialize();
}
4、下一步就是把这个子程序注入到原来的EXE中了,把它做成个DLL,上面程序中的DLL_API就是把这个函数做成Export的。把编译好的DLL放到原来程序的目录下,使用LoadPE向EXE中加一个段,把自已的DLL导入,把所写的函数加进去就行了。保存EXE,然后用OllyDbg加载EXE,这里在内存中就能看到所写的DLL已经有了。在IAT输入表中找到子程序的地址后,填到前面第2步调用子程序处,测试通过,大功告成。
这里的LoadPE和Ollydbg都是好东西,网上资料很多,学习的可访问http://www.pediy.com/,那里有很多好文章可参考。
难题二:修改资源后程序不能再运行了。难点解决后,为了方便就用ResHack来改变程序资源,把原来的软件大变脸,图片、菜单、图标、对话框、字串统统都改成了自己的,看起来就象自己写的程序一样了,呵呵。ResHack也是好东西,虽然很老,但比其它后来的资源修改工具还是功能强大直观,但缺点是不能使用查找、替换,没法批量改,只能手工来改。
改是改好了,但一运行,发现EXE程序已经坏了,不能运行了。原因是前面我用LordPE给程序加了一个新段,而资源在这个段的前面,改完资源后我的程序中的导入表全坏了,也不能用了。使用ImportREC修复不了,这个东西也不好使,因为程序没法子再加新的段了。后来经过多次实验终于解决了,使用的工具还是LordPE,下面是我的步骤:
1、首先用LordPE(CaoCong的修改加强版很好用)的PE修改->区段,然后点右键选择分割,把EXE文件按文件头、text、 rdata、rsrc和Silvana(最后这个区段是LordPE注入时给程序加上的)分别保存各段数据。
2、用LordPE的合并功能,选择上一步生成的split.ini文件,把程序重新拼装起来,这时程序就可用了,大功告成。这一步最关键的是,在选项上要选择自动修正区段表,外壳扩张和修正文件头,否则拼出来的文件还是不能运行。
我走了很多弯路才找到正确的方法,写出来可能对有相同要求的用户有所帮助。有高手有更好的办法么?洗耳恭听。
难题三:写自己的安装程序。这个不算太难,因为源程序是用wise做的安装,所以用wise来检视安装过程就能大致了解软件的安装过程了。但要从安装包中找到所有文件也费了些劲,网友可下载这几个软件来做wun,wiselist,wiseform,exwise_dore。还有安装脚本分析的,但在网上没有找到wise安装脚本破解软件,只能找出压缩包中的东西。
这篇文章只是第一篇,其实在做这个项目的过程中还有很多更难的事,好在查了很多网上资料后都一一解决了,以后再讨论吧。
有高人能外部动态修改已经运行的程序的菜单么?这个程序没有用普通的资源菜单操作,VC7的MFC写的,而且是浮动菜单,也很难找到CMENU指针啊,好象都是程序自己处理的,没有怎么用API的函数,所以很难挂钩注入来解决。您能和我交流一下么?程序在http://vod.yueqi.com中的视频在线客户端上,先谢了。
N
同时转发到微博
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
OllyDBG简单爆破小记
《0day安全软件漏洞分析技术》学习笔记
如何写一个简单的病毒程序
写壳的一些成果[TLS完美处理,压缩功能实现,AntiDump-过LordPE,调用sprintf?...
OllyDBG 入门系列(四)-内存断点
【原创】OllyDBG分析报告系列(1)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服