好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 CHHSun 于 2009-4-25 14:44 编辑
大P就是Peace2008啦;P
程序就不公开了。
一、
爆破大P同志给我的加密码框。
输入密码,主程序才运行。
核心扫描Borland Delphi 6.0 - 7.0,也不知他加的什么!!
OD载入,下bp MessageBoxA断点,输入假码,断下后返回。(下这GetDlgItemTextA,GetDlgItem两个断点好象也行,没试)
断在这
0012F900 004A8F45 /CALL 到 MessageBoxA 来自 Builder0.004A8F3F
0012F904 000C010C |hOwner = 000C010C ('LC Crypto :: v0.1 by LC',class='LCCrypto32')
0012F908 004A8745 |Text = "密码不正确,请重新输入!"
0012F90C 004A8681 |Title = "LC Crypto :: v0.1 by LC"
0012F910 00000040 \Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0012F914 /0012F940
返回到
004A8EF1 FF15 60844A00 call dword ptr ds:[4A8460] ; user32.GetDlgItemTextA
004A8EF7 E8 FD000000 call Builder0.004A8FF9
004A8EFC 8D1D 6E874A00 lea ebx,dword ptr ds:[4A876E>
004A8F02 E8 1A010000 call Builder0.004A9021
004A8F07 3905 5E874A00 cmp dword ptr ds:[4A875E],ea>
004A8F0D 0F9405 81884A00 sete byte ptr ds:[4A8881]
004A8F14 74 09 je short Builder0.004A8F1F
004A8F16 833D ED884A00 01 cmp dword ptr ds:[4A88ED],1
004A8F1D 75 11 jnz short Builder0.004A8F30 ; 跳到错误提示。NOP掉不行,程序退出。
004A8F1F 6A 00 push 0
004A8F21 6A 00 push 0
004A8F23 6A 10 push 10
004A8F25 FF75 08 push dword ptr ss:[ebp+8]
004A8F28 FF15 2C844A00 call dword ptr ds:[4A842C] ; user32.PostMessageA
004A8F2E EB 72 jmp short Builder0.004A8FA2
004A8F30 6A 40 push 40
004A8F32 68 81864A00 push Builder0.004A8681 ; ASCII "LC Crypto :: v0.1 by LC"
004A8F37 68 45874A00 push Builder0.004A8745
004A8F3C FF75 08 push dword ptr ss:[ebp+8]
004A8F3F FF15 44844A00 call dword ptr ds:[4A8444] ; 错误提示
004A8F45 6A 64 push 64
004A8F47 FF75 08 push dword ptr ss:[ebp+8]
004A8F4A FF15 78844A00 call dword ptr ds:[4A8478] ; user32.GetDlgItem
我们就在
004A8EF1 FF15 60844A00 call dword ptr ds:[4A8460] ; user32.GetDlgItemTextA
这一行下断吧。
在运行一次断下,F8单步向个走。
004A8EEE FF75 08 push dword ptr ss:[ebp+8]
004A8EF1 FF15 60844A00 call dword ptr ds:[4A8460] ; user32.GetDlgItemTextA
004A8EF7 E8 FD000000 call Builder0.004A8FF9
004A8EFC 8D1D 6E874A00 lea ebx,dword ptr ds:[4A876E] ; 假码出现
004A8F02 E8 1A010000 call Builder0.004A9021
004A8F07 3905 5E874A00 cmp dword ptr ds:[4A875E],eax ; 比较
004A8F0D 0F9405 81884A00 sete byte ptr ds:[4A8881] ; 辅助窗口中显示条件为假FALSE,改为true
004A8F14 74 09 je short Builder0.004A8F1F ; 等于真码就跳。这里我们让他跳过
004A8F16 833D ED884A00 01 cmp dword ptr ds:[4A88ED],1
004A8F1D 75 11 jnz short Builder0.004A8F30 ; 跳到错误提示。这地方NOP掉程序关闭。
004A8F1F 6A 00 push 0
004A8F21 6A 00 push 0
关键地方到了。下面改
把004A8F0D 0F9405 81884A00 sete byte ptr ds:[4A8881]
改为004A8F0D 0F9505 81884A00 setne byte ptr ds:[4A8881]
把004A8F14 /74 09 je short Builder0.004A8F1F
改为004A8F14 /EB 09 jmp short Builder0.004A8F1F
保存一份。运行看看。OK了。
二、
测试大P同志的加密解密程序的一点记录.
程序VB,密码正确的话解密出来的程序能运行,如果爆破错提示框的话解出来的程序不能运行.
到底怎么办呢.看我下面的记录.
OD载入,下bp rtcMsgBox断点.运行程序输入假码,F9,中断在
堆栈:
0012F324 734916CA MSVBVM60.__vbaVarDup
0012F328 0040663E 返回到 工程1.0040663E 来自 MSVBVM60.rtcMsgBox 在这里返回
0012F32C 0012F3D4
返回到程序领空向上找看是哪个跳跳向错的
004065B8 6A 00 push 0
004065BA FF15 B8114000 call dword ptr ds:[<&MSVBVM6>; MSVBVM60.__vbaStrComp
004065C0 66:85C0 test ax,ax
004065C3 0F84 9F000000 je 工程1.00406668 ; 这里是跳向错误,
004065C9 8B3D C0114000 mov edi,dword ptr ds:[<&MSVB>; MSVBVM60.__vbaVarDup
004065CF B9 0A000000 mov ecx,0A
有人说了,改这个跳不就行了.对,行是行了.也可以解出来了.
但是,解出来的程序是DOS运行的东东不是原程序.也就是说不能运行.
那怎么办来
好我们看看上面的比较MSVBVM60.__vbaStrComp,在一行下断,重载断下后,看看寄存器.
004065B8 6A 00 push 0
004065BA FF15 B8114000 call dword ptr ds:[<&MSVBVM6>; MSVBVM60.__vbaStrComp
004065C0 66:85C0 test ax,ax
004065C3 0F84 9F000000 je 工程1.00406668 ; 这里是跳向错误,
004065C9 8B3D C0114000 mov edi,dword ptr ds:[<&MSVB>; MSVBVM60.__vbaVarDup
004065CF B9 0A000000 mov ecx,0A
EAX 0016D98C UNICODE "3794DABC9BAD5854606CB3C6D30DDBFD"这是我们的程序加密的假码
ECX 0012F404
EDX 0016DA04 UNICODE "88B795D18137E961EE37274D40F35307"这是真码,明码
EBX 73472101 MSVBVM60.__vbaRedim
在这里我们看出如果eax等于 88B795D18137E961EE37274D40F35307的话就成功.
有人说了把这一行输入不就行了.答案是非也。密码也被加密了,MD5的查不到,不知是又如何运算的.怎么办
那们就想另外一种方法,既然真码加密了存在于程序里,那我们就想办法找到假码和真码的位置,
把假的改成程序里的加密过的真码.
寄存器里出现了,离这个地方不会远的.我们向上找.
0040657E 52 push edx 我们在这里下断吧,在向上找也没意思了.
0040657F 8B55 14 mov edx,dword ptr ss:[ebp+14>
00406582 8B08 mov ecx,dword ptr ds:[eax]
00406584 52 push edx
00406585 50 push eax
00406586 FF51 2C call dword ptr ds:[ecx+2C]
00406589 85C0 test eax,eax
0040658B DBE2 fclex
0040658D 7D 12 jge short 工程1.004065A1
0040658F 8B4D DC mov ecx,dword ptr ss:[ebp-24>
00406592 6A 2C push 2C
00406594 68 34364000 push 工程1.00403634
00406599 51 push ecx
0040659A 50 push eax
0040659B FF15 5C104000 call dword ptr ds:[<&MSVBVM6>; MSVBVM60.__vbaHresultCheckObj
004065A1 8B55 B8 mov edx,dword ptr ss:[ebp-48>
004065A4 8D4D D8 lea ecx,dword ptr ss:[ebp-28>
004065A7 C745 B8 00000000 mov dword ptr ss:[ebp-48],0
004065AE FFD7 call edi
004065B0 8B55 E4 mov edx,dword ptr ss:[ebp-1C>
004065B3 8B45 D8 mov eax,dword ptr ss:[ebp-28>
004065B6 52 push edx
004065B7 50 push eax
004065B8 6A 00 push 0
004065BA FF15 B8114000 call dword ptr ds:[<&MSVBVM6>; MSVBVM60.__vbaStrComp
004065C0 66:85C0 test ax,ax
004065C3 0F84 9F000000 je 工程1.00406668 ; 跳向错误,
004065C9 8B3D C0114000 mov edi,dword ptr ds:[<&MSVB>; MSVBVM60.__vbaVarDup
重载断下.F8单步向下注意看辅助窗口.假期码出现的时候.
走在这里
004065A1 8B55 B8 mov edx,dword ptr ss:[ebp-48>
出现了
堆栈 ss:[0012F3E4]=0016D98C, (UNICODE "3794DABC9BAD5854606CB3C6D30DDBFD")
edx=0040C478 (工程1.0040C478)
下面我们就想办法把它改为88B795D18137E961EE37274D40F35307,
在上面的辅助窗口或堆栈的这个地方数据窗口中跟随数值.来到这里,看数据窗口
0016D98C 33 00 37 00 39 00 34 00 44 00 41 00 42 00 43 00 3.7.9.4.D.A.B.C.
0016D99C 39 00 42 00 41 00 44 00 35 00 38 00 35 00 34 00 9.B.A.D.5.8.5.4.
0016D9AC 36 00 30 00 36 00 43 00 42 00 33 00 43 00 36 00 6.0.6.C.B.3.C.6.
0016D9BC 44 00 33 00 30 00 44 00 44 00 42 00 46 00 44 00 D.3.0.D.D.B.F.D.
0016D9CC 00 00 62 97 5C 00 E5 5D 0B 7A 31 00 5C 00 74 00 ..b梊.錧z1.\.t.
0016D9DC 67 00 37 00 30 00 00 00 0D F0 AD BA AB AB AB AB g.7.0....瓠韩
0016D9FC 45 07 18 00 40 00 00 00 38 00 38 00 42 00 37 00 E.@...8.8.B.7.
0016DA0C 39 00 35 00 44 00 31 00 38 00 31 00 33 00 37 00 9.5.D.1.8.1.3.7.
0016DA1C 45 00 39 00 36 00 31 00 45 00 45 00 33 00 37 00 E.9.6.1.E.E.3.7.
0016DA2C 32 00 37 00 34 00 44 00 34 00 30 00 46 00 33 00 2.7.4.D.4.0.F.3.
0016DA3C 35 00 33 00 30 00 37 00 00 00 62 97 5C 00 E5 5D 5.3.0.7...b梊.錧
0016DA4C 0B 7A 31 00 5C 00 74 00 67 00 37 00 30 00 z1.\.t.g.7.0.
把真码二进制复制粘到假码的位置
0016D98C 38 00 38 00 42 00 37 00 39 00 35 00 44 00 31 00 8.8.B.7.9.5.D.1.
0016D99C 38 00 31 00 33 00 37 00 45 00 39 00 36 00 31 00 8.1.3.7.E.9.6.1.
0016D9AC 45 00 45 00 33 00 37 00 32 00 37 00 34 00 44 00 E.E.3.7.2.7.4.D.
0016D9BC 34 00 30 00 46 00 33 00 35 00 33 00 30 00 37 4.0.F.3.5.3.0.7
0016D9FC 45 07 18 00 40 00 00 00 38 00 38 00 42 00 37 00 E.@...8.8.B.7.
0016DA0C 39 00 35 00 44 00 31 00 38 00 31 00 33 00 37 00 9.5.D.1.8.1.3.7.
0016DA1C 45 00 39 00 36 00 31 00 45 00 45 00 33 00 37 00 E.9.6.1.E.E.3.7.
0016DA2C 32 00 37 00 34 00 44 00 34 00 30 00 46 00 33 00 2.7.4.D.4.0.F.3.
0016DA3C 35 00 33 00 30 00 37 00 00 00 62 97 5C 00 E5 5D 5.3.0.7...b梊.錧
0016DA4C 0B 7A 31 00 5C 00 74 00 67 00 37 00 30 00 z1.\.t.g.7.0.
这样就相等了吧.
运行程序解码成功程序打开.
总结:
爆破不一定改跳转就行.[s:42] |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|