Pnmker 发表于 2015-5-17 23:03

利用TRW2000和W32DASM破解16 Bit NE FORMAT可执行程序

本帖最后由 Pnmker 于 2015-5-28 19:05 编辑

       最近朋友给了一个五子棋的游戏让帮忙破解,把悔棋需要注册码给破掉。因他说程序比较老,不能在现在的64位系统上运行,故而询问他得知是90年代的。一听到是这个年代,我一阵暗喜,想那个时候程序应该加壳的意识不强,即便有应该也不会多么强的壳,OD几下子应该就可以搞定了。       不过,没想到当程序拿到手之后OD加载运行直接提示不是有效的PE格式,无视继续调试时搜索字符串无论是ASCII还是UNICODE都无法搜出悔棋时提示的字符串。使用ResHacker查看资源也有类似的提示。如果是这样的话,,麻烦就有点大了,OD可能就无法进行破解了,因为C/C++方面我所熟悉的破解工具就只有OD而已。       后来,在家中经过多方面的工具查找验证原来这个五子棋程序是16位NE 格式的可执行程序。呵呵,这下我可大开了眼界,原来除了PE格式之外还有一种叫做New Executable格式的可执行程序,只好恶补了一下这方面的历史知识。不过这对破解帮助不大,我还是不知道该用什么工具去破解。      于是去论坛里问大牛,大牛们回复说用windbg、softice或者TRW2000。windbg和softice曾经安装感受过,当时是感觉它们都过于复杂了,现在更是心里一点怵怕的感觉。至于TRW2000则完全没有用过,我自信自己是一个接触新东西很快的人,对它就没有什么怕的。大牛们说TRW2000要在win9x系统下使用,临时下系统装系统,(当然是在虚拟机环境下),经过验证win98运行有点问题,win95则完全正常!       好了,至此废话说了一大堆,主要是想把整个的破解过程写下来,也算是日后自己反悟的一个历程,当然同时也希望对各位痴迷于破解的道友有所帮助。下面正式进入破解话题。

       首先,明确一下破解目标,就是把下图中的关于注册码的弹窗去掉,并能够正常实现悔棋。                                       
       第一步,当然是开TRW2000载入五子棋的程序,然后出现经典的TRW2000调试界面,如下:                                       
   果断下断点bpx messagebox,返回五子棋界面运行程序,结果并没有达到预期的弹窗出现时中断的效果。                                       
看来,注册码提示窗口还不是经典的MessageBox弹窗,那会是怎么弹出来的呢?这下我又蒙了,TRW2000这是我第一次用,更深入的功能暂时不会,一时之下就不知道该如何是好了。这时我的第一个想法就是,如果能像IDA一样把程序整个反汇编出来该多好,静态分析是我最擅长的,说不定可以通过阅读汇编代码找到一个窍门。马上上网查找16位程序的静态分析工具,呵呵,下面该W32DSM出场了。       在W32DSM中打开五子棋程序,进行反汇编如下:                                       
嗯,效果不错,反汇编的额外注释也比较丰富,读起来也比较轻松,大致浏览代码发现其中有几处出现call USER.DIALOGBOX :                                       
好吧,就在此函数下断,马上在TRW2000中输入bpx dialogbox回车,运行程序进行悔棋,哈哈,成功中断!!!                                       
然后,马上执行PMOUDLE命令返回五子棋模块WMAKE5所在的领空,发现紧接着call USER.DIALOGBOX下一条指令的偏移值IP位0BED。下面又轮到W32DSM出场了                                       
切换到W32DSM,查找到偏移值为0BED的那一条指令,然后仔细阅读这条指令前后的代码可以得出以下结论:                                    
切换回TRW2000,在0C25、0C3E、0C55、0DEE、0E59处下断:                                    
切换到五子棋程序,进行悔棋操作,哈哈,程序又成功中断在了0DEE处,这下就可以找到程序判断注册码是否有效的代码段了!                                 
再切换到W32DASM中转到0DEE处,仔细阅读前后的代码,可知偏移0DD6处的je 0DEA代码即是跳转到弹出注册码无效提示执行的关键指令,只要修改此处不进行跳转即可!                                    
现在,关键指令行已经找到,现在只要对其进行修改就OK了,W32DASM的强大之处就在于此,它不仅可以静态反汇编,也可以调试32位程序(可惜的是不支持16位),而且还可以对指令进行修改!由于je0DEA指令对应的机器码为2字节,因此只需要两个nop即可,但对应16位的nop我不确定,而且恰好其上一行的指令or ax,ax也是2字节又不影响后续指令的执行,因此暂时就用or ax,ax来替换je 0DEA吧。                                    
替换为之后点击“应用”就大功告成了!用W32DASM打开应用之后生成的破解后的程序Wmake5_bak.exe,转到0DD6处查看,嗯,修改成功!去运行程序操作一下看吧,哈哈,悔棋再也没有那个讨厌的弹窗了,而且也可以正常悔棋了!!!!                                    
欢迎大家拍砖!
五子棋程序下载链接: http://pan.baidu.com/s/1qWysrcK 密码: p9p5

蚯蚓翔龙 发表于 2015-5-17 23:31

又一个不错的分享贴哦,记得160个CM的第12个就是NE格式的,OD没办法调试,IDA应该猜可以调试(不过我不懂)
TRW可能用得上了,你这个程序似乎还算简单,那个对于那个CM来说只能静态反汇编,虽然结果也是没什么好结果,虽然代码在IDA里面就十几行...

king8222 发表于 2015-5-17 23:48

看看了~

beta 发表于 2015-5-18 08:55

谢谢分享,之前也是遇到一个NE的程序

Hmily 发表于 2015-5-22 22:24

16位程序的破解分析太少了,感谢Pnmker分享,加精鼓励!

vigers 发表于 2015-5-22 22:50

16位的都能破解,很费心思{:1_931:}

ningzhonghui 发表于 2015-5-22 23:53

从没碰到过,学习来了

Jacve 发表于 2015-5-23 10:43

接触到的16位程序都没到16个

山顶的一棵草 发表于 2015-5-23 12:17

我想玩五子棋{:1_907:}

carloslau 发表于 2015-5-23 12:36

不错,很详细,谢谢。
页: [1] 2 3
查看完整版本: 利用TRW2000和W32DASM破解16 Bit NE FORMAT可执行程序