工具 : softice, trw2000, procdump
前言 :
这个 netterm1.exe 被我用 aspack2000 加壳了,我是要练习脱壳...所以我就随便选一个来加壳奇怪的是, procdump 1.62 应该是可以脱掉 aspack2000但是我试了一下,好像脱不掉...
不管,反正现在加壳之风以日渐盛行,若不会脱壳,是不行的.有看过我的上一篇教学吗 ? 是有关於脱掉 aspack1.08.03 的壳, 但是能脱掉我写的程式,其他不行...
如果有看的话,应该有看到我的参考文献,知道大概是要如脱壳吧, 通常被加壳的程式呢 , 一开始执行时,要把程式解压缩到记忆体, 在进入真正程式的 Entry point 所以只要找到程式的 Entry point, 就行了。 而你若走到一个回圈, 常常在那边绕来绕去, 那就很有可能是在解压缩了。若你突然走到一个地方, 位址变化很大,那可能就是程式进入点了. 若找到程式进入点 , 你就可以大笑三声了
ok, Let's go!!
1: 用 softice 载入 netterm1.exe, 奇怪, 在我的电脑无法载入...
没关系... 执行 procdump, 选 PE Editor-> 选 netterm1.exe
看到 Entry point : 0005E001
Size of image : 00061000
Image Base : 00400000
那就是说, 程式一启动的 EIP 应该是 00400000 + 0005E001 = 0045E001
所以, 但是, 要如何到这边呢 ? 直接进入softice,下 bpx 0045E001 ??
当然是不行的, 要等程式到了 netterm1 的
空在下 bpx 0045E001 才行
那要如何到 netterm1 的
空 呢 ?
有很多种方法, 随便下一个 netterm1 有用到的 API, 就可以拦截了
例如说下 bpx createwindowexa ,执行 netterm1, 立刻被拦到
下 bd*, 暂停刚刚的断点, 按几下 F12, 立刻回到netterm1 的
空了
如何知道是不是 netterm1 的
空呢 ? 仔细看下方的一条绿线, 若写著
netterm1 , 就是到了是 netterm1 的
空了 ,
到了时候, 下 bpx 0045E001 , 按 F5, 离开 softice .
2: 执行 netterm1.exe ,立刻被拦住,在 cs:0045e001
好啦, 开始 trace 了...
很罗唆喔,也很烦, 会一直绕来绕去...
这是就要用一点技巧来加快 trace,
就是设中断点... 看一下程式, 你认为最远会跳到哪里呢?
中断点就设那边, 在按 F5, 如此循环
要是预估错误呢导致 netterm1 跑出来了呢? 那就算了..再执行一次啊
好,到了cs:0045e4f2 call 0045e577cs:0045e4f4 jnz 0045e4fccs:0045e4f9 ret ccs:0045e4fc mov eax,1cs:0045e501 ret
走到这边时,就是快要走完了
3: 小心地按 F10 ... 到了,
cs:0043f3cd mov eax,fs:[0]
注意看一下位址, 差好多喔,
而且看一下下面几行程式码,
有在呼叫 GetVersion , GetCommandLineA
若是解压缩的 source code, 是不会有这些的
所以, 聪明的你, 猜到了吧...
猜他是程式进入点, 就是 Entry point
4: 下bd* 先暂停所有的断点,按F5, 回到 windows
启动 trw2000, 载入 netterm1.exe,
竟然可以 load, 发现 trw2000 load 的能力比 softice 还强喔
ok, 开始 trace ...
不过,真的要 trace 吗 ? 不觉得太累了吗..
好吧, 偷懒一下, 因为用 softice 已经知道位址了
下 g 0043f3c0,
到了之後, 下 pedump net1.exe , net1.exe 名字可自己取
找一下 c:windows ; 或是 netterm1 的所在目录, 或是 trw2000 的目录
就可以找到 net1.exe 了,
将他 copy 到 netterm 的目录, 执行一下...发现没有错误...
5: 嘿嘿, 开始聚气(在玩 KOF吗? 干吗聚气 ?), 达到饱和时, 开始大笑三声吧, 哈 ! 哈 ! 哈 !
第一次自己脱掉 procdump 脱不掉的壳...
岂是一个爽字了得呢 ?
对於高手, 当然脱壳以不是问题, 而对於我这个菜鸟
我已经很满足了 ....
6: 不过美中不足的是,脱的壳比原本档案大, 原本的档案是 359936 byte
脱壳之後是 397312 byte, 比本来还大...
欢迎高手来信指教, 看是哪里我的做法有哪些要改进的,很差的,
谢谢
e-mail address: g8742099@ccunix.ccu.edu.tw
後言:
或许会有人觉得奇怪, 为什堋不直接用 trw2000 trace啊, 用softice 干吗 ? 因为我实在是用不惯 trw2000, 我唯一认同 trw2000 的优点是, 他可以 dump EXE,还有不用常驻, 更惨的是, 用 trw2000 1.03 版的, 有时还会当机... 而且有些指令不能用, 如 A , 天啊, A 不能用... 这岂不是在开玩笑吗... (难道是作者希望我们不要太 A ?? 因为 A 是...) 叫我注册...好吧, 等到 trw 在更成熟一点, 不会当机, 使用起来和 softice 相同时,我在考虑注册吧...毕竟这套软体实在不错,不过现在感觉还有很多改善的空间