首页
社区
课程
招聘
[求助]一个光盘上的VB加密文件
发表于: 2004-6-27 14:16 7364

[求助]一个光盘上的VB加密文件

2004-6-27 14:16
7364
今日去电脑市场,买回一套动画片,放入正欲观看,发现里面竟然是一些图片,很是郁闷,后听朋友说,这类光盘要在运行AUTORUN时按几个键的,但是具体哪里几个也各不相同,试了几个朋友说的都不行,于是想到解密(电脑市场离家很远的)
可是本人小菜鸟,水平实在太差,现在就将我自己看见的一些情况说一下.
1、先查壳
peid显示为Microsoft Visual Basic 5.0 / 6.0,我估计是5.0的,他调用MSVBVM50.DLL.没有壳,不过是VB的,我就怕了,虽然会VB编程,但是对解VB的程序真是怕怕。
2、用VBExplorer.exe反编译
很失望,他就让我看见主窗体中有个KEY_DOWN事件,也就是按一下键盘的键他运行一下。可是看不见KEY_DOWN事件的代码,55555,这个也叫反编译?真是的。。。。。
3、用OD调入,CTRL+N后没看见有API,不知道怎么下断点。
4、用SmartCheck,发现我在键盘上按动任意一个键盘他就出现一次KEYDOWN,但是选择查看所有事件后,在KEYDOWN中发现不了有用的数据。

请各位大哥帮帮我哦。点击下载:附件!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (23)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
:D 呵呵,我下载后未修改时启动是样的:


而在跟踪过程修改了一个数值,现在每次启动就变成这样。
:D  
2004-6-27 15:05
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
:( 重启电脑后情况依旧,不会是已经将他解密了吧?,没有文件无法验证。
2004-6-27 15:25
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵,小虾大哥,你真厉害,估计你已经解密了,可以教教我嘛?
2004-6-27 22:30
0
雪    币: 2384
活跃值: (766)
能力值: (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
2004-6-27 23:47
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
TRW只能在98下运行,softice电脑上没安装,用OD可以吗,如何用
2004-6-28 00:06
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
7
用OD也一样,在命令行中下中断点。
2004-6-28 00:07
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我看看
2004-6-28 00:10
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好像中断不了啊,而且我按F9运行还有访问违反之类的错误,在命令中bpx GetStartupInfoA,后和按CTRL+N的效果一样,好像不能下这个断点
2004-6-28 00:18
0
雪    币: 2384
活跃值: (766)
能力值: (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
.......................................................
2004-6-28 00:27
0
雪    币: 229
活跃值: (10)
能力值: ( 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

估计他在注册表什么地方做了手脚了吧,因为我密码已经输进去过了。您和我说说大致的原理吧,我明天再看看他在注册表哪里做了标志,删除后再搞
2004-6-28 00:45
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
12
看看注册表中有没有这个键值:HKEY_CURRENT_USER\Software\VB and VBA Program Settings\jmdiaoyongApp\Startup
看看有没有这个键值:han_bdshq,若有将其设为0,
2004-6-28 00:51
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好的
2004-6-28 00:54
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
注册表的标记是对了,改了后就会到原来的样子了,但是到00401138处后还是跳到
7402A1BF > 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
2004-6-28 01:00
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我睡觉了,明天还要考试类,555,谢谢小虾哥,明天有空再向您请教。
2004-6-28 01:02
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
16
进入第一个Call是跳到那里开始没错呀?现在你的程序有没有解密成功?
2004-6-28 01:05
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
可以打开了,应该是成功了吧,但是我还不知道原理呢
2004-6-28 01:07
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
18
原理我也不太清楚,只是凭运气和经验靠猜的。:D
2004-6-28 01:13
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
哦,那谢谢了
2004-6-28 01:16
0
雪    币: 280
活跃值: (281)
能力值: ( 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

我想程序不可能修改系统函数使其适应自己,所以跳转的关键一定在程序本身。两位看看我的是否能成功。
2004-6-28 22:14
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
21
分析得不错。
2004-6-29 13:44
0
雪    币: 229
活跃值: (10)
能力值: ( 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就成功了,您可以告诉我为什么吗?
2004-6-29 23:03
0
雪    币: 280
活跃值: (281)
能力值: ( 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的十六进制,找到后看它从哪里跳转来,然后....就看你本事了。
2004-6-30 00:49
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
多谢指教!谢谢
2004-6-30 10:43
0
游客
登录 | 注册 方可回帖
返回
//