硬件断点之三----- 关机暗桩的解除
本帖最后由 mm475 于 2014-12-18 04:48 编辑今天看到格盘大大的视频https://www.52hb.com/thread-3604-1-1.html于是就拿他的软件练练手,在写教程之前谈几句题外话,论坛运行2个多月了,经过了被攻击、迁移……等等,终于回归正常,有2个人也默默的运行了2个多月,一个是恒大、一个是格盘。机器还有当机的时候,更何况人,但是你不管是什么时间发帖,他都第一时间回复!向他致敬!好了!废话不多说,格盘的教程里谈到了脱壳,谈到了Patch,谈到了爆破点,那么我就从那个爆破点开始讲起,这样我也可以把后面的讲详细点!对了这个软件有个关机暗桩 OD载入004094f5 爆破点0040B31A E8 41830900 call <jmp.&user32.ExitWindowsEx> ; \ExitWindowsEx0040B325 E8 36830900 call <jmp.&user32.ExitWindowsEx> ; \ExitWindowsEx因为我爆破后被关机了,所以要练手的话先在关机暗桩的段首下好段,以免走到那里重新再来。0040B270 关机暗桩段首先下上断点,一会再讲如何处理首先来004094f5 爆破点004094E8|.8B95 74FFFFFF mov edx, 004094EE|.80BA 91030000>cmp byte ptr ds:,0x0 此处下断分析运行004094F5|.0F85 2C060000 jnz UnPack.00409B27 要让此处跳必须上面不相等
下好断点以后,重新载入第一次断下,没什么情况,不用管他第二次断下004049D8 .C680 90030000>mov byte ptr ds:,0x1 给断点处赋值1004049DF .8B4D FC mov ecx,dword ptr ss:004049E2 .C681 91030000>mov byte ptr ds:,0x0 给断点处赋值0004049E9 .8B45 D0 mov eax,dword ptr ss:上面肯定有个判断,不管他了全都赋值1,断点处我们也赋值1 继续第三次断下,我们发现刚断点处赋值的1变成了0 是al赋值的。我们现在要找下al是那里赋值的0040D8AD|.8B01 mov eax,dword ptr ds: 此处给eax赋值在此处下断0040D8AF|.E8 B02A0300 call UnPack.004403640040D8B4|>8B55 9C mov edx,0040D8B7|.FFB2 1C030000 push dword ptr ds:0040D8BD|.E8 92F9FFFF call UnPack.0040D2540040D8C2|.59 pop ecx0040D8C3|.8B0D 64F24A00 mov ecx,dword ptr ds:0040D8C9|.8B11 mov edx,dword ptr ds:0040D8CB|.8882 91030000 mov byte ptr ds:,al 此处al=00040D8D1|.8B45 A0 mov eax,0040D8D4|.64:A3 0000000>mov dword ptr fs:,eax0040D8DA|.8BE5 mov esp,ebp0040D8DC|.5D pop ebp在0040D8AD下断,经过调试al的0是在0040D8BD call 里得到的,我们F7进call查看0040D4FB|> \8A45 DB mov al,byte ptr ss:Al的0的ebp-0x25的 但是我们发现ebp-0x30值是2!觉定修改代码0040D4FB|> \8A45 DB mov al,byte ptr ss:第四次断下是个比较。然后软件启动点注册这是完成注册了,好吧!保存一下现在要去掉暗桩了,暗桩是怎么触发的?当我们点转换ico的时候,暗桩就触发了!而且暗桩是2次调用本地调用来自 00407195, 004076D6 两处的段首分别下断,再次重新载入
00407130|. /74 59 je XUnPack.0040718B 跳向正确的 0040718B00407132|. |8B15 70F24A00 mov edx,dword ptr ds: ;UnPack._Form300407138|. |8B02 mov eax,dword ptr ds:0040713A|. |05 1C030000 add eax,0x31C0040713F|. |8945 BC mov ,eax00407142|. |8B55 BC mov edx,00407145|. |833A 00 cmp dword ptr ds:,0x000407148|. |74 07 je XUnPack.00407151 0040714A|. |8B4D BC mov ecx,0040714D|. |8B01 mov eax,dword ptr ds:0040714F|. |EB 05 jmp XUnPack.0040715600407151|> |B8 4A484A00 mov eax,UnPack.004A484A00407156|> |0FBE50 14 movsx edx,byte ptr ds:0040715A|. |83FA 41 cmp edx,0x410040715D|. |75 30 jnz XUnPack.0040718F 程序重这里跳下0040718F0040715F|. |8B0D 70F24A00 mov ecx,dword ptr ds: ; 00407165|. |8B01 mov eax,dword ptr ds:00407167|. |05 1C030000 add eax,0x31C0040716C|. |8945 B8 mov ,eax0040716F|. |8B55 B8 mov edx,00407172|. |833A 00 cmp dword ptr ds:,0x000407175|. |74 07 je XUnPack.0040717E00407177|. |8B4D B8 mov ecx,0040717A|. |8B01 mov eax,dword ptr ds:0040717C|. |EB 05 jmp XUnPack.004071830040717E|> |B8 4B484A00 mov eax,UnPack.004A484B00407183|> |0FBE10 movsx edx,byte ptr ds:00407186|. |83FA 5A cmp edx,0x5A00407189|. |75 04 jnz XUnPack.0040718F0040718B|> \C645 CB 01mov byte ptr ss:,0x1如果跳向这里,就可以跳过暗桩0040718F|>807D CB 00 cmp byte ptr ss:,0x0 此处的比较,jnz是不跳的00407193|.75 20 jnz XUnPack.004071B5 可以跳过暗桩00407195|.E8 D6400000 call UnPack.0040B270 暗桩CALL00407195, 004076D6两处的情况差不多,两处能跳过暗桩的关键跳转改之00407130 jmpXUnPack.0040718B 00407647 jmp XUnPack.004076B4修改好保存重新载入更换图标
你们这是用FZ了吧!!!评分可以秒的吗?
475发布的精品教程非常多啊,讲解非常详细!大赞!{:6_208:}
不错、我居然没有去注意这个常量、简直是我的失误、感谢楼主为我解答疑惑
mm475的教程真心详细啊!!
前排膜拜大大教程
支持,谢谢楼主分享!
教程写的很详细,楼主辛苦了!谢谢!
很详细的教程 我这样的新手通俗易懂 收益很多吖
赞一个,475的教程很详细,实用