能力值:
(RANK:410 )
|
-
-
2 楼
:D 呵呵,我下载后未修改时启动是样的:
而在跟踪过程修改了一个数值,现在每次启动就变成这样。
:D
|
能力值:
(RANK:410 )
|
-
-
3 楼
:( 重启电脑后情况依旧,不会是已经将他解密了吧?,没有文件无法验证。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
呵呵,小虾大哥,你真厉害,估计你已经解密了,可以教教我嘛?
|
能力值:
(RANK:410 )
|
-
-
5 楼
你可以试试下面的方法,成不成功告诉一下,让我好知道是不是解密成功。:D
先用TRW2000或SoftICE加载程序,下中断点:bpx GetStartupInfoA,F5运行,中断,跳出这个函数,来到这里:
0167:798ba1fd call `KERNEL32!GetStartupInfoA`
0167:798ba203 movzx eax,word [ebp-34] //走过这一句时EAX值为0,将其设为1即可。
0167:798ba207 mov [799c1d78],eax
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
TRW只能在98下运行,softice电脑上没安装,用OD可以吗,如何用
|
能力值:
(RANK:410 )
|
-
-
7 楼
用OD也一样,在命令行中下中断点。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我看看
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
好像中断不了啊,而且我按F9运行还有访问违反之类的错误,在命令中bpx GetStartupInfoA,后和按CTRL+N的效果一样,好像不能下这个断点
|
能力值:
(RANK:410 )
|
-
-
10 楼
用OD加载程序,将停在在这里:
00401140 > $ 68 F41B4000 PUSH AUTORUN.00401BF4 ; 中断在这里
00401145 . E8 EEFFFFFF CALL <JMP.&MSVBVM50.#100> ; F7进入这个Call
0040114A . 0000 ADD BYTE PTR DS:[EAX],AL
0040114C . 0000 ADD BYTE PTR DS:[EAX],AL
0040114E . 0000 ADD BYTE PTR DS:[EAX],AL
00401150 . 3000 XOR BYTE PTR DS:[EAX],AL
00401152 . 0000 ADD BYTE PTR DS:[EAX],AL
00401154 . 3800 CMP BYTE PTR DS:[EAX],AL
00401156 . 0000 ADD BYTE PTR DS:[EAX],AL
00401158 . 0000 ADD BYTE PTR DS:[EAX],AL
0040115A . 0000 ADD BYTE PTR DS:[EAX],AL
.....................................................
00401138 $- FF25 6C414000 JMP DWORD PTR DS ;到这里,再跳。
.....................................................
798BA1BF > 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] ; 跳到这里
798BA1C5 55 PUSH EBP
798BA1C6 8BEC MOV EBP,ESP
798BA1C8 6A FF PUSH -1
798BA1CA 68 88A28B79 PUSH MSVBVM50.798BA288
798BA1CF 68 84369979 PUSH MSVBVM50.79993684
798BA1D4 50 PUSH EAX
798BA1D5 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
798BA1DC 83EC 54 SUB ESP,54
798BA1DF C745 E4 FFFF008>MOV DWORD PTR SS:[EBP-1C],8000FFFF
798BA1E6 53 PUSH EBX
798BA1E7 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
798BA1EA 56 PUSH ESI
798BA1EB A3 E8239C79 MOV DWORD PTR DS:[799C23E8],EAX
798BA1F0 57 PUSH EDI
798BA1F1 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
798BA1F4 33F6 XOR ESI,ESI
798BA1F6 8975 FC MOV DWORD PTR SS:[EBP-4],ESI
798BA1F9 8D45 9C LEA EAX,DWORD PTR SS:[EBP-64]
798BA1FC 50 PUSH EAX
798BA1FD FF15 14118B79 CALL DWORD PTR DS:[<&KERNEL32.GetStartupInfoA>] ; 函数GetStartupInfoA
798BA203 0FB745 CC MOVZX EAX,WORD PTR SS:[EBP-34] ; 走过这一句是EAX值为0,将其设为1看看
798BA207 A3 781D9C79 MOV DWORD PTR DS:[799C1D78],EAX
798BA20C A1 7C1D9C79 MOV EAX,DWORD PTR DS:[799C1D7C]
798BA211 50 PUSH EAX
798BA212 FF75 08 PUSH DWORD PTR SS:[EBP+8]
798BA215 B9 A8219C79 MOV ECX,MSVBVM50.799C21A8
798BA21A E8 75000000 CALL MSVBVM50.798BA294
.......................................................
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
我晕了,可能是我下午把密码输入进去了(下午在网上找到了密码)
现在调试走的路线总是不对,开始和你一样的,到00401138处后跳到
7402A1BF > 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
7402A1C5 55 PUSH EBP
7402A1C6 8BEC MOV EBP,ESP
7402A1C8 6A FF PUSH -1
7402A1CA 68 88A20274 PUSH MSVBVM50.7402A288
7402A1CF 68 84361074 PUSH MSVBVM50.74103684
7402A1D4 50 PUSH EAX
7402A1D5 64:8925 00000000 MOV DWORD PTR FS:[0],ESP
7402A1DC 83EC 54 SUB ESP,54
7402A1DF C745 E4 FFFF0080 MOV DWORD PTR SS:[EBP-1C],8000FFFF
7402A1E6 53 PUSH EBX
7402A1E7 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
7402A1EA 56 PUSH ESI
7402A1EB A3 E8231374 MOV DWORD PTR DS:[741323E8],EAX
7402A1F0 57 PUSH EDI
7402A1F1 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
7402A1F4 33F6 XOR ESI,ESI
7402A1F6 8975 FC MOV DWORD PTR SS:[EBP-4],ESI
7402A1F9 8D45 9C LEA EAX,DWORD PTR SS:[EBP-64]
7402A1FC 50 PUSH EAX
7402A1FD FF15 14110274 CALL DWORD PTR DS:[<&KERNEL32.GetStartup>; kernel32.GetStartupInfoA
7402A203 0FB745 CC MOVZX EAX,WORD PTR SS:[EBP-34]
7402A207 A3 781D1374 MOV DWORD PTR DS:[74131D78],EAX
7402A20C A1 7C1D1374 MOV EAX,DWORD PTR DS:[74131D7C]
7402A211 50 PUSH EAX
7402A212 FF75 08 PUSH DWORD PTR SS:[EBP+8]
7402A215 B9 A8211374 MOV ECX,MSVBVM50.741321A8
7402A21A E8 75000000 CALL MSVBVM50.7402A294
7402A21F 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
7402A222 3BC6 CMP EAX,ESI
7402A224 7D 1C JGE SHORT MSVBVM50.7402A242
7402A226 FF75 E4 PUSH DWORD PTR SS:[EBP-1C]
7402A229 E8 97960000 CALL MSVBVM50.740338C5
7402A22E C745 FC FFFFFFFF MOV DWORD PTR SS:[EBP-4],-1
7402A235 6A 00 PUSH 0
7402A237 FF15 1C110274 CALL DWORD PTR DS:[<&KERNEL32.ExitProces>; kernel32.ExitProcess
7402A23D E9 CFA30500 JMP MSVBVM50.74084611
估计他在注册表什么地方做了手脚了吧,因为我密码已经输进去过了。您和我说说大致的原理吧,我明天再看看他在注册表哪里做了标志,删除后再搞
|
能力值:
(RANK:410 )
|
-
-
12 楼
看看注册表中有没有这个键值:HKEY_CURRENT_USER\Software\VB and VBA Program Settings\jmdiaoyongApp\Startup
看看有没有这个键值:han_bdshq,若有将其设为0,
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
好的
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
注册表的标记是对了,改了后就会到原来的样子了,但是到00401138处后还是跳到
7402A1BF > 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我睡觉了,明天还要考试类,555,谢谢小虾哥,明天有空再向您请教。
|
能力值:
(RANK:410 )
|
-
-
16 楼
进入第一个Call是跳到那里开始没错呀?现在你的程序有没有解密成功?
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
可以打开了,应该是成功了吧,但是我还不知道原理呢
|
能力值:
(RANK:410 )
|
-
-
18 楼
原理我也不太清楚,只是凭运气和经验靠猜的。:D
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
哦,那谢谢了
|
能力值:
( LV9,RANK:250 )
|
-
-
20 楼
我觉得解密的关键点的在这:
0040297F PUSH AUTORUN.00402394 ; UNICODE "han_bdshq"
00402984 MOV DWORD PTR DS:[EDX+4],ECX
00402987 PUSH AUTORUN.00402380 ; UNICODE "Startup"
0040298C PUSH AUTORUN.00402360 ; UNICODE "jmdiaoyongApp"
00402991 MOV WORD PTR DS:[ESI+34],BX
00402995 MOV DWORD PTR DS:[EDX+8],EAX
00402998 MOV EAX,DWORD PTR SS:[EBP-4C]
0040299B MOV DWORD PTR DS:[EDX+C],EAX
0040299E CALL DWORD PTR DS:[<&MSVBVM50.#689>] ; MSVBVM50.rtcGetSetting
004029A4 MOV ESI,DWORD PTR DS:[<&MSVBVM50.__vbaVa>; MSVBVM50.__vbaVarMove
004029AA LEA EDX,DWORD PTR SS:[EBP-48]
004029AD LEA ECX,DWORD PTR SS:[EBP-24]
004029B0 MOV DWORD PTR SS:[EBP-40],EAX
004029B3 MOV DWORD PTR SS:[EBP-48],EDI
004029B6 CALL ESI ; <&MSVBVM50.__vbaVarMove>
004029B8 LEA ECX,DWORD PTR SS:[EBP-24]
004029BB LEA EDX,DWORD PTR SS:[EBP-58]
004029BE PUSH ECX
004029BF PUSH EDX
004029C0 MOV DWORD PTR SS:[EBP-50],1
004029C7 MOV DWORD PTR SS:[EBP-58],8002
004029CE CALL DWORD PTR DS:[<&MSVBVM50.__vbaVarTs>; MSVBVM50.__vbaVarTstEq
004029D4 TEST AX,AX
004029D7 JE AUTORUN.00402A85 --->关键的跳转。
004029DD LEA EDX,DWORD PTR SS:[EBP-58]
004029E0 LEA ECX,DWORD PTR SS:[EBP-48]
004029E3 MOV DWORD PTR SS:[EBP-50],AUTORUN.004023>; UNICODE ".\TOOLS\Data1.tag\"
004029EA MOV DWORD PTR SS:[EBP-58],EDI
004029ED CALL DWORD PTR DS:[<&MSVBVM50.__vbaVarDu>; MSVBVM50.__vbaVarDup
004029F3 LEA EAX,DWORD PTR SS:[EBP-48]
004029F6 PUSH 1
004029F8 PUSH EAX
004029F9 CALL DWORD PTR DS:[<&MSVBVM50.#600>] ; MSVBVM50.rtcShell
我想程序不可能修改系统函数使其适应自己,所以跳转的关键一定在程序本身。两位看看我的是否能成功。
|
能力值:
(RANK:410 )
|
-
-
21 楼
分析得不错。
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
最初由 lzqgj 发布 我觉得解密的关键点的在这: 0040297F PUSH AUTORUN.00402394 ; UNICODE "han_bdshq" 00402984 MOV DWORD PTR DS:[EDX+4],ECX 00402987 PUSH AUTORUN.00402380 ; UNICODE "Startup" 0040298C PUSH AUTORUN.00402360 ; UNICODE "jmdiaoyongApp" 00402991 MOV WORD PTR DS:[ESI+34],BX 00402995 MOV DWORD PTR DS:[EDX+8],EAX 00402998 MOV EAX,DWORD PTR SS:[EBP-4C] 0040299B MOV DWORD PTR DS:[EDX+C],EAX 0040299E CALL DWORD PTR DS:[<&MSVBVM50.#689>] ; MSVBVM50.rtcGetSetting 004029A4 MOV ESI,DWORD PTR DS:[<&MSVBVM50.__vbaVa>; MSVBVM50.__vbaVarMove 004029AA LEA EDX,DWORD PTR SS:[EBP-48] 004029AD LEA ECX,DWORD PTR SS:[EBP-24] 004029B0 MOV DWORD PTR SS:[EBP-40],EAX 004029B3 MOV DWORD PTR SS:[EBP-48],EDI 004029B6 CALL ESI ; <&MSVBVM50.__vbaVarMove> 004029B8 LEA ECX,DWORD PTR SS:[EBP-24] 004029BB LEA EDX,DWORD PTR SS:[EBP-58] 004029BE PUSH ECX 004029BF PUSH EDX 004029C0 MOV DWORD PTR SS:[EBP-50],1 004029C7 MOV DWORD PTR SS:[EBP-58],8002 004029CE CALL DWORD PTR DS:[<&MSVBVM50.__vbaVarTs>; MSVBVM50.__vbaVarTstEq 004029D4 TEST AX,AX 004029D7 JE AUTORUN.00402A85 --->关键的跳转。 004029DD LEA EDX,DWORD PTR SS:[EBP-58] 004029E0 LEA ECX,DWORD PTR SS:[EBP-48] 004029E3 MOV DWORD PTR SS:[EBP-50],AUTORUN.004023>; UNICODE ".\TOOLS\Data1.tag\" 004029EA MOV DWORD PTR SS:[EBP-58],EDI 004029ED CALL DWORD PTR DS:[<&MSVBVM50.__vbaVarDu>; MSVBVM50.__vbaVarDup 004029F3 LEA EAX,DWORD PTR SS:[EBP-48] 004029F6 PUSH 1 004029F8 PUSH EAX 004029F9 CALL DWORD PTR DS:[<&MSVBVM50.#600>] ; MSVBVM50.rtcShell
我想程序不可能修改系统函数使其适应自己,所以跳转的关键一定在程序本身。两位看看我的是否能成功。
请教,您是如何分析后找到这段代码的,我实验了,我修改了JE AUTORUN.00402A85就成功了,您可以告诉我为什么吗?
|
能力值:
( LV9,RANK:250 )
|
-
-
23 楼
首先VB程序一般会用Form_Load过程判断启动的一些参数,如是否为光盘运行。所以要找到该过程代码。
VB程序最好先用反编译工具。我用VBDED反编译没发现有用信息(估计程序做了手脚,防VBDED),只好用比较笨的方法,OD载入后,第一句在这:
00401140 >PUSH AUTORUN.00401BF4
00401145 CALL <JMP.&MSVBVM50.#100>
0040114A ADD BYTE PTR DS:[EAX],AL
0040114C ADD BYTE PTR DS:[EAX],AL
0040114E ADD BYTE PTR DS:[EAX],AL
00401150 XOR BYTE PTR DS:[EAX],AL
00401152 ADD BYTE PTR DS:[EAX],AL
实际有用的就两句。往下看,是一堆乱码,实际是程序启动的一些参数,如FORM的大小、位置、是否可见等。一直看到:
00402640 PUSH EBP
00402641 MOV EBP,ESP
00402643 SUB ESP,0C
00402646 PUSH <JMP.&MSVBVM50.__vbaExceptHandler> ; SE handler installation
从402640开始就是VB程序的各过程代码了,如form_load,command_click等,直到402AD0结束。
00402ACD MOV ESP,EBP
00402ACF POP EBP
00402AD0 RETN 4
00402AD3 NOP
00402AD4 NOP
在内存中选择从402640到402AD4,下内存访问断点,F9运行,程序生乖乖在4028F0停下,于是逐步跟踪直到关键跳转。
另外还有一个技巧:在程序停在4028F0时注意观察发现跳转来自402144,再到402144看看就会有重大发现:
00402104 ADD DWORD PTR SS:[ESP+4],34
0040210C MOV ECX,<JMP.&MSVBVM50.#300>
00402111 JMP ECX
00402113 ADD DWORD PTR SS:[ESP+4],34
0040211B MOV ECX,<JMP.&MSVBVM50.#306>
00402120 JMP ECX
00402122 SUB DWORD PTR SS:[ESP+4],3F
0040212A JMP AUTORUN.00402640
0040212F SUB DWORD PTR SS:[ESP+4],37
00402137 JMP AUTORUN.00402730
0040213C SUB DWORD PTR SS:[ESP+4],37
00402144 JMP AUTORUN.004028F0
这些跳转就是VB程序各过程的入口。可以在每个入口处下断点(或下内存访问断点),然后跟踪每个过程,可能注册方法或破解关键就能找到。
也可直接搜索55 8B EC的十六进制,找到后看它从哪里跳转来,然后....就看你本事了。
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
多谢指教!谢谢
|
|
|