简单Hasp加密锁的分析与解密
程序名:国内的结构设计类软件名字隐去作者:孤城(寂静如风) 孤城=寂静如风 ^_^
保护:Hasp--Hardlock
所用工具: OllyDBG 1.10PEIDLordPE ImportREC 1.6
我只是大体说一下思路!
用PEID查壳,没有狗壳,UPX壳而已,简单的脱壳,过程不叙述。
00702C8A|.E8 B9A10500 CALL <JMP.&KERNEL32.OutputDebugStringA>; \OutputDebugStringA
00702C8F|.8D53 08 LEA EDX,DWORD PTR DS:
00702C92|.52 PUSH EDX ; /Arg1
00702C93|.E8 F8060000 CALL czr_ggg.00703390 ; \xxx.00703390 重要的CALL 去看看
00702C98|.59 POP ECX
00702C99|.48 DEC EAX
00702C9A|.75 1B JNZ SHORT czr_ggg.00702CB7
00702C9C|.C743 04 04000>MOV DWORD PTR DS:,4
00702CA3|.53 PUSH EBX ; /Arg1
00702CA4|.E8 D7000000 CALL czr_ggg.00702D80 ; \xxx.00702D80 这里也去看看
00702CA9|.59 POP ECX
00702CAA|.A3 48E99100 MOV DWORD PTR DS:,EAX
00702CAF|.B8 01000000 MOV EAX,1
00702CB4|.5B POP EBX
00702CB5|.5D POP EBP
00702CB6|.C3 RETN
00702CB7|>68 70DD9000 PUSH czr_ggg.0090DD70
"
继续看
进入刚才的CALL
00703390/$55 PUSH EBP
00703391|.8BEC MOV EBP,ESP
00703393|.53 PUSH EBX
00703394|.56 PUSH ESI
00703395|.57 PUSH EDI
00703396|.8B5D 08 MOV EBX,DWORD PTR SS:
00703399|.8B43 04 MOV EAX,DWORD PTR DS:
0070339C 48 DEC EAX 到这里为检测狗的类型
0070339D 75 0A JNZ SHORT czr_ggg.007033A9 跳则为网络版,让其变为单机版 否则网络验证
0070339F B8 01000000 MOV EAX,1
007033A4|.E9 03010000 JMP czr_ggg.007034AC
007033A9|>53 PUSH EBX ; /Arg1
007033AA|.E8 75FEFFFF CALL czr_ggg.00703224 ; \xxx.00703224
007033AF|.59 POP ECX
007033B0|.8D53 28 LEA EDX,DWORD PTR DS:
007033B3|.52 PUSH EDX ; /Arg9
007033B4|.8D4B 24 LEA ECX,DWORD PTR DS: ; |
007033B7|.51 PUSH ECX ; |Arg8
007033B8|.8D7B 20 LEA EDI,DWORD PTR DS: ; |
007033BB|.57 PUSH EDI ; |Arg7
007033BC|.8D73 1C LEA ESI,DWORD PTR DS: ; |
007033BF|.56 PUSH ESI ; |Arg6
007033C0|.8B43 14 MOV EAX,DWORD PTR DS: ; |
007033C3|.50 PUSH EAX ; |Arg5
007033C4|.8B53 10 MOV EDX,DWORD PTR DS: ; |
007033C7|.52 PUSH EDX ; |Arg4
007033C8|.8B4B 18 MOV ECX,DWORD PTR DS: ; |
007033CB|.51 PUSH ECX ; |Arg3
007033CC|.6A 01 PUSH 1 ; |Arg2 = 00000001
007033CE|.6A 01 PUSH 1 ; |Arg1 = 00000001
007033D0|.E8 2F6A0500 CALL czr_ggg.00759E04 ; \xxx.00759E04
007033D5|.83C4 24 ADD ESP,24
007033D8|.8B43 1C MOV EAX,DWORD PTR DS:
007033DB|.85C0 TEST EAX,EAX
007033DD|.75 07 JNZ SHORT czr_ggg.007033E6
007033DF|.33C0 XOR EAX,EAX
当中的代码省略
继续往下看。 重点部分1
00759E04/$55 PUSH EBP
00759E05|.8BEC MOV EBP,ESP
00759E07|.83C4 EC ADD ESP,-14
00759E0A|.53 PUSH EBX
00759E0B|.56 PUSH ESI
00759E0C|.57 PUSH EDI
00759E0D|.8B45 20 MOV EAX,DWORD PTR SS:
00759E10|.8B7D 18 MOV EDI,DWORD PTR SS:
00759E13|.8B75 14 MOV ESI,DWORD PTR SS:
00759E16|.8B5D 10 MOV EBX,DWORD PTR SS:
00759E19|.8B55 08 MOV EDX,DWORD PTR SS:
00759E1C|.83FA 09 CMP EDX,9
00759E1F|.74 22 JE SHORT czr_ggg.00759E43
00759E21|.8B4D 28 MOV ECX,DWORD PTR SS:
00759E24|.51 PUSH ECX ; /Arg9
00759E25|.8B4D 24 MOV ECX,DWORD PTR SS: ; |
00759E28|.51 PUSH ECX ; |Arg8
00759E29|.50 PUSH EAX ; |Arg7
00759E2A|.8B45 1C MOV EAX,DWORD PTR SS: ; |
00759E2D|.50 PUSH EAX ; |Arg6
00759E2E|.57 PUSH EDI ; |Arg5
00759E2F|.56 PUSH ESI ; |Arg4
00759E30|.53 PUSH EBX ; |Arg3
00759E31|.8B45 0C MOV EAX,DWORD PTR SS: ; |
00759E34|.50 PUSH EAX ; |Arg2 = 00000001
00759E35|.52 PUSH EDX ; |Arg1
00759E36|.E8 81010000 CALL czr_ggg.00759FBC ; \xxx.00759FBC 进去看看
00759E3B|.83C4 24 ADD ESP,24
00759E3E|.E9 6F010000 JMP czr_ggg.00759FB2
00759FBC/$55 PUSH EBP
00759FBD|.8BEC MOV EBP,ESP
00759FBF|.83C4 B8 ADD ESP,-48
00759FC2|.53 PUSH EBX
00759FC3|.56 PUSH ESI
00759FC4|.57 PUSH EDI
00759FC5|.8B75 28 MOV ESI,DWORD PTR SS:
00759FC8|.8B5D 20 MOV EBX,DWORD PTR SS:
00759FCB|.8B45 08 MOV EAX,DWORD PTR SS:
00759FCE|.8D7D B8 LEA EDI,DWORD PTR SS:
00759FD1|.3D FF000000 CMP EAX,0FF 对狗密码进行比较
00759FD6 76 0E JBE SHORT czr_ggg.00759FE6 跳 就 完蛋
00759FD8|.8B45 24 MOV EAX,DWORD PTR SS:
00759FDB|.C700 19FCFFFF MOV DWORD PTR DS:,-3E7
00759FE1|.E9 84000000 JMP czr_ggg.0075A06A
00759FE6|>C747 08 6C687>MOV DWORD PTR DS:,6873686C
00759FED|.C607 02 MOV BYTE PTR DS:,2
00759FF0|.C747 04 01000>MOV DWORD PTR DS:,1
00759FF7|.8847 16 MOV BYTE PTR DS:,AL
00759FFA|.8B55 0C MOV EDX,DWORD PTR SS:
00759FFD|.8957 18 MOV DWORD PTR DS:,EDX
0075A000|.8B4D 10 MOV ECX,DWORD PTR SS:
0075A003|.894F 1C MOV DWORD PTR DS:,ECX
经过好久来到这里
007034F9|.8B53 18 MOV EDX,DWORD PTR DS:
007034FC|.52 PUSH EDX ; |Arg3
007034FD|.6A 01 PUSH 1 ; |Arg2 = 00000001
007034FF|.6A 03 PUSH 3 ; |Arg1 = 00000003
00703501|.E8 FE680500 CALL czr_ggg.00759E04 \xxx.00759E04 这不就是我们刚才去过的
00703506|.83C4 24 ADD ESP,24
00703509|.8B4D 10 MOV ECX,DWORD PTR SS:
0070350C|.66:8B43 20 MOV AX,WORD PTR DS:
00703510|.66:8901 MOV WORD PTR DS:,AX
00703513|.8B43 24 MOV EAX,DWORD PTR DS:
00703516|.8943 0C MOV DWORD PTR DS:,EAX
00703519|.85C0 TEST EAX,EAX 判断是否有狗,eax=0则有狗改之
0070351B|.74 05 JE SHORT czr_ggg.00703522 相等则为有狗 跳
0070351D|.33C0 XOR EAX,EAX
0070351F|.5B POP EBX
00703520|.5D POP EBP
00703521|.C3 RETN
继续看,来到这里关键
00702E22|.E8 09FFFFFF CALL czr_ggg.00702D30 ; \xxx.00702D30
00702E27|.83C4 0C ADD ESP,0C
00702E2A|.85C0 TEST EAX,EAX 对返回值进行判断
00702E2C|.75 05 JNZ SHORT czr_ggg.00702E33 不跳就完蛋
00702E2E|.83C8 FF OR EAX,FFFFFFFF
00702E31|.EB 43 JMP SHORT czr_ggg.00702E76 跳到报错 程序无反应
00702E33|>8D55 FE LEA EDX,DWORD PTR SS:
00702E36|.52 PUSH EDX ; /Arg3
00702E37|.6A 02 PUSH 2 ; |Arg2 = 00000002
00702E39|.68 50E99100 PUSH czr_ggg.0091E950 ; |Arg1 = 0091E950
00702E3E|.E8 EDFEFFFF CALL czr_ggg.00702D30 ; \xxx.00702D30 计算返回的数据 00702E43|.83C4 0C ADD ESP,0C
00702E46|.48 DEC EAX
00702E47|.75 2A JNZ SHORT czr_ggg.00702E73 跳就完蛋 程序无反应
00702E49|.66:817D FE 70>CMP WORD PTR SS:,3570比较数据的值
00702E4F|.75 22 JNZ SHORT czr_ggg.00702E73 跳就完蛋 程序无反应
00702E51|.8D4D FE LEA ECX,DWORD PTR SS:
00702E54|.51 PUSH ECX ; /Arg3
00702E55|.56 PUSH ESI ; |Arg2
00702E56|.68 50E99100 PUSH czr_ggg.0091E950 ; |Arg1 = 0091E950
00702E5B|.E8 D0FEFFFF CALL czr_ggg.00702D30 ; \xxx.00702D30 计算返回的数据
00702E60|.83C4 0C ADD ESP,0C
00702E63|.85C0 TEST EAX,EAX 对返回值进行判断
00702E65|.74 0C JE SHORT czr_ggg.00702E73 跳就完蛋 程序无反应
00702E67|.0FB745 FE MOVZX EAX,WORD PTR SS:
00702E6B|.85D8 TEST EAX,EBX 对返回值再次进行判断
00702E6D|.74 04 JE SHORT czr_ggg.00702E73 跳就完蛋 程序无反应
00702E6F|.33C0 XOR EAX,EAX
00702E71|.EB 03 JMP SHORT czr_ggg.00702E76 到正确的流程
00702E73|>83C8 FF OR EAX,FFFFFFFF
00702E76|>5E POP ESI
继续的检测部分
004012E0 .6A 00 PUSH 0 ; /Arg2 = 00000000
004012E2 .6A 4B PUSH 4B ; |Arg1 = 0000004B
004012E4 .E8 971B3000 CALL czr_ggg.00702E80 ; \xxx.00702E80计算数据
004012E9 .85C0 TEST EAX,EAX 对数据进行判断
004012EB .74 3E JE SHORT czr_ggg.0040132B 不跳就完蛋
004012ED .66:C745 E0 14>MOV WORD PTR SS:,14
004012F3 .BA 40EA7500 MOV EDX,czr_ggg.0075EA40
004012F8 .8D45 F8 LEA EAX,DWORD PTR SS:
004012FB .E8 909C3500 CALL czr_ggg.0075AF90
00401300 .FF45 EC INC DWORD PTR SS:
00401303 .8B00 MOV EAX,DWORD PTR DS:
00401305 .E8 DE6A2300 CALL czr_ggg.00637DE8
0040130A .FF4D EC DEC DWORD PTR SS:
0040130D .8D45 F8 LEA EAX,DWORD PTR SS:
00401310 .BA 02000000 MOV EDX,2
00401315 .E8 429E3500 CALL czr_ggg.0075B15C
0040131A .33C0 XOR EAX,EAX
0040131C .8B55 D0 MOV EDX,DWORD PTR SS:
0040131F .64:8915 00000>MOV DWORD PTR FS:,EDX
00401326 .E9 F6000000 JMP czr_ggg.00401421
0040132B >8B0D 7C949100 MOV ECX,DWORD PTR DS: ;xxx.00919D34
00401331 .8B01 MOV EAX,DWORD PTR DS:
00401333 .E8 38E52200 CALL czr_ggg.0062F870
00401338 .66:C745 E0 20>MOV WORD PTR SS:,20
0040133E .BA 59EA7500 MOV EDX,czr_ggg.0075EA59
00401343 .8D45 F4 LEA EAX,DWORD PTR SS:
00401346 .E8 459C3500 CALL czr_ggg.0075AF90
这样处理后运行程序还会有问题的!看样子是没有解决完!咱们在来看看!
第二部分
007033FB .51 PUSH ECX ; |Arg3
007033FC .6A 01 PUSH 1 ; |Arg2 = 00000001
007033FE .6A 05 PUSH 5 ; |Arg1 = 00000005
00703400 .E8 FF690500 CALL czr_ggg.00759E04 ; \xxx.00759E04 再次读狗
00703405 .83C4 24 ADD ESP,24
00703408 .8B43 24 MOV EAX,DWORD PTR DS: 返回的数据值
0070340B .85C0 TEST EAX,EAX 比较
0070340D .75 6D JNZ SHORT czr_ggg.0070347C 跳到报错,程序无反应
0070340F .53 PUSH EBX ; /Arg1
00703410 .E8 0FFEFFFF CALL czr_ggg.00703224 ; \xxx.00703224 计算返回的数据
00703415 .59 POP ECX
00703416 .B8 4E740000 MOV EAX,744E
0070341B .C743 10 CB080>MOV DWORD PTR DS:,8CB
00703422 .8943 14 MOV DWORD PTR DS:,EAX
00703425 .8D53 28 LEA EDX,DWORD PTR DS:
00703428 .52 PUSH EDX ; /Arg9
00703429 .8D4B 24 LEA ECX,DWORD PTR DS: ; |
0070342C .51 PUSH ECX ; |Arg8
0070342D .57 PUSH EDI ; |Arg7
0070342E .56 PUSH ESI ; |Arg6
0070342F .50 PUSH EAX ; |Arg5 => 0000744E
00703430 .8B43 10 MOV EAX,DWORD PTR DS: ; |
00703433 .50 PUSH EAX ; |Arg4
00703434 .8B53 18 MOV EDX,DWORD PTR DS: ; |
00703437 .52 PUSH EDX ; |Arg3
00703438 .6A 01 PUSH 1 ; |Arg2 = 00000001
0070343A .6A 01 PUSH 1 ; |Arg1 = 00000001
0070343C .E8 C3690500 CALL czr_ggg.00759E04 ; \xxx.00759E04 再次读狗
00703441 .83C4 24 ADD ESP,24
00703444 .8B4B 1C MOV ECX,DWORD PTR DS: 返回的数据值
00703447 .85C9 TEST ECX,ECX 比较
00703449 .75 04 JNZ SHORT czr_ggg.0070344F 跳到报错 程序无反应
0070344B .33C0 XOR EAX,EAX 这里为有狗
0070344D .EB 5D JMP SHORT czr_ggg.007034AC 正确的流程
0070344F >8D53 28 LEA EDX,DWORD PTR DS:
00703452 .8D4B 24 LEA ECX,DWORD PTR DS:
00703455 .52 PUSH EDX ; /Arg9
00703456 .51 PUSH ECX ; |Arg8
00703457 .57 PUSH EDI ; |Arg7
00703458 .56 PUSH ESI ; |Arg6
00703459 .8B43 14 MOV EAX,DWORD PTR DS: ; |
0070345C .50 PUSH EAX ; |Arg5
0070345D .8B53 10 MOV EDX,DWORD PTR DS: ; |
00703460 .52 PUSH EDX ; |Arg4
00703461 .8B4B 18 MOV ECX,DWORD PTR DS: ; |
00703464 .51 PUSH ECX ; |Arg3
00703465 .6A 01 PUSH 1 ; |Arg2 = 00000001
00703467 .6A 05 PUSH 5 ; |Arg1 = 00000005
00703469 .E8 96690500 CALL czr_ggg.00759E04 ; xxx.00759E04再次读狗
0070346E .83C4 24 ADD ESP,24
00703471 .8B43 24 MOV EAX,DWORD PTR DS: 返回的数据值
00703474 .85C0 TEST EAX,EAX 比较
00703476 .75 04 JNZ SHORT czr_ggg.0070347C 跳到报错 程序无反应
00703478 .33C0 XOR EAX,EAX 这里为有狗
0070347A .EB 30 JMP SHORT czr_ggg.007034AC 正确的流程
0070347C >8B53 20 MOV EDX,DWORD PTR DS:
0070347F .83FA 05 CMP EDX,5 比较
00703482 .75 16 JNZ SHORT czr_ggg.0070349A 跳到错误的流程继续比较
00703484 .53 PUSH EBX ; /Arg1
00703485 .E8 C2FDFFFF CALL czr_ggg.0070324C ; \xxx.0070324C 计算返回的数据
0070348A .59 POP ECX
0070348B .85C0 TEST EAX,EAX 比较
0070348D .75 04 JNZ SHORT czr_ggg.00703493 跳到错误的流程
0070348F .33C0 XOR EAX,EAX
00703491 .EB 19 JMP SHORT czr_ggg.007034AC 到正确的流程
00703493 >C743 08 01000>MOV DWORD PTR DS:,1
0070349A >8B53 24 MOV EDX,DWORD PTR DS:
0070349D .B8 01000000 MOV EAX,1
007034A2 .8953 18 MOV DWORD PTR DS:,EDX
007034A5 .C743 04 01000>MOV DWORD PTR DS:,1
007034AC >5F POP EDI
007034AD .5E POP ESI
007034AE .5B POP EBX
007034AF .5D POP EBP
007034B0 .C3 RETN
经过了这部分后狗部分就解掉了!
总结!
上面的部分只是解狗里面的一种而已!想这个软件还有好几种解法!这种解法比较容易理解!呵呵~我就献丑了!希望大家不要笑我!
孤城(寂静如风)
[email protected]
2006.2.27
BTW:wx73721 孤城 寂静如风 都是我的注册ID 经过N个连接,来到了飘云。论坛不错,发篇自己前些日子写的暴文!
BTW :飘云 能否收我为学员??;););)
[ 本帖最后由 wx73721 于 2006-4-2 10:20 编辑 ] 樓主高手真是謙虛了
我還想讓飄云老大收下我等新人當學員呢 加密狗的软件是防解密,上述方法好,学习一下方法,提供了思路 加密狗的软件是防解密,上述方法好,学习一下方法,提供了思路 谢谢楼主分享,学习中!! 虽然我没看懂不过小菜还是支持下大神 路过必顶。谢谢分享。 楼主厉害,路过必顶 谢谢分享学习了😊
页:
[1]