首页
社区
课程
招聘
[旧帖] [求助]关于一个U盘的破解 0.00雪花
发表于: 2007-11-8 16:31 5168

[旧帖] [求助]关于一个U盘的破解 0.00雪花

2007-11-8 16:31
5168
最近有个找出个U盘,是N年前遗忘在家的。
   打开U盘,发现有一个LOGIN.EXE的密码保护。由于U盘的年代久远,我忘记了密码。
   在此也是为了学习好OllyDbg. 开始了了破解密码之路。但还有许多问题解决。请大家帮忙.....
     谢谢!
   login.exe 程序77K,无壳。直接用OllyDbg。

   关键地址:
004012B7  |. 56             PUSH ESI
004012B8  |. E8 93000000    CALL login.00401350              做了提取窗口密码等工作
004012BD  |. 83C4 04        ADD ESP,4
004012C0  |. 85C0           TEST EAX,EAX                                 ;  IF 相等就跳转到login.0040131B
004012C2  |. 75 57          JNZ SHORT login.0040131B                     ;  关闭输入密码窗口 ........00401

如果将JNZ SHORT login.0040131B           强行修改成JMP。程序运行正常,并关闭了密码输入窗口。但U盘内还是只有一个Login.exe. 应该是004012B8  |. E8 93000000    CALL login.00401350 我想是:其中一些加载U盘驱动的。

00401350  /$ A0 9D0F4100    MOV AL,BYTE PTR DS:[410F9D]
00401355  |. 83EC 20        SUB ESP,20
00401358  |. 50             PUSH EAX
00401359  |. E8 72320000    CALL login.004045D0
0040135E  |. 83C4 04        ADD ESP,4
00401361  |. E8 5A340000    CALL login.004047C0
00401366  |. E8 15370000    CALL login.00404A80
0040136B  |. 84C0           TEST AL,AL
0040136D  |. 74 30          JE SHORT login.0040139F

====================================================
0040139F     |> 56             PUSH ESI
004013A0     |. 8B7424 28      MOV ESI,DWORD PTR SS:[ESP+28]
004013A4     |. 57             PUSH EDI
004013A5     |. 8D4C24 08      LEA ECX,DWORD PTR SS:[ESP+8]
004013A9     |. 6A 20          PUSH 20                                      ; /Count = 20 (32.)
004013AB     |. 51             PUSH ECX                                     ; |Buffer
004013AC     |. 68 E9030000    PUSH 3E9                                     ; |ControlID = 3E9 (1001.)
004013B1     |. 56             PUSH ESI                                     ; |hWnd
004013B2     |. FF15 00B14000  CALL DWORD PTR DS:[<&USER32.GetDlgItemTextA>>; \GetDlgItemTextA
004013B8     |. 8BF8           MOV EDI,EAX
004013BA     |. 83FF 10        CMP EDI,10
004013BD     |. 76 2D          JBE SHORT login.004013EC                     ;  取得密码ID后的第一跳gin.00401
004013BF     |. A1 44334100    MOV EAX,DWORD PTR DS:[413344]
004013C4     |. 6A 40          PUSH 40                                      ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004013C6     |. 8B1485 30C1400>MOV EDX,DWORD PTR DS:[EAX*4+40C130]          ; |
004013CD     |. 8B0485 70C1400>MOV EAX,DWORD PTR DS:[EAX*4+40C170]          ; |
004013D4     |. 52             PUSH EDX                                     ; |Title
004013D5     |. 50             PUSH EAX                                     ; |Text
004013D6     |. 56             PUSH ESI                                     ; |hOwner
004013D7     |. FF15 1CB14000  CALL DWORD PTR DS:[<&USER32.MessageBoxA>]    ; \MessageBoxA
004013DD     |. 33F6           XOR ESI,ESI
004013DF     |. E8 9C320000    CALL login.00404680
004013E4     |. 8BC6           MOV EAX,ESI
004013E6     |. 5F             POP EDI
004013E7     |. 5E             POP ESI
004013E8     |. 83C4 20        ADD ESP,20
004013EB     |. C3             RETN
004013EC     |> 8A15 40E74500  MOV DL,BYTE PTR DS:[45E740]
004013F2     |. 8D4C24 08      LEA ECX,DWORD PTR SS:[ESP+8]                 ;  把注册码框中的数值送到ECXTR SS:[ESP+ ///这里就出现了我在密码框输入的“QWER”的密码
004013F6     |. 57             PUSH EDI                                     ;  EDI 入栈I
004013F7     |. 51             PUSH ECX                                     ;  ECX 入栈X
004013F8     |. 52             PUSH EDX                                     ;  EDX 入栈X
004013F9     |. E8 32370000    CALL login.00404B30                          ;  跳到00404B30做了些什么?

004013FE     |. 25 FF000000    AND EAX,0FF
00401403     |. 83C4 0C        ADD ESP,0C
00401406     |. 8BF0           MOV ESI,EAX
00401408     |. A0 40094600    MOV AL,BYTE PTR DS:[460940]
0040140D        3C 14          CMP AL,14                                    ;  CMP AL,14
0040140F     |. 75 3B          JNZ SHORT login.0040144C
00401411     |. A0 9D0F4100    MOV AL,BYTE PTR DS:[410F9D]
00401416     |. 50             PUSH EAX
00401417     |. E8 C4440000    CALL login.004058E0
0040141C     |. 83C4 04        ADD ESP,4
0040141F     |. 84C0           TEST AL,AL
00401421     |. 74 29          JE SHORT login.0040144C
00401423     |. 8A0D 40E74500  MOV CL,BYTE PTR DS:[45E740]
00401429     |. 8D5424 08      LEA EDX,DWORD PTR SS:[ESP+8]
0040142D     |. 84C9           TEST CL,CL
0040142F     |. 0F94C1         SETE CL
00401432     |. 884C24 2C      MOV BYTE PTR SS:[ESP+2C],CL
00401436     |. 57             PUSH EDI
00401437     |. 8B4424 30      MOV EAX,DWORD PTR SS:[ESP+30]
0040143B     |. 52             PUSH EDX
0040143C     |. 50             PUSH EAX
0040143D     |. E8 EE360000    CALL login.00404B30
00401442     |. 83C4 0C        ADD ESP,0C
00401445     |. 25 FF000000    AND EAX,0FF
0040144A     |. 8BF0           MOV ESI,EAX
0040144C     |> E8 2F320000    CALL login.00404680
00401451     |. 8BC6           MOV EAX,ESI
00401453     |. 5F             POP EDI
00401454     |. 5E             POP ESI
00401455     |. 83C4 20        ADD ESP,20
00401458        C3             RETN

然后从RETN 直接回到了
004012BD  |. 83C4 04        ADD ESP,4
004012C0     |. 85C0           TEST EAX,EAX                                 ;  IF 相等就跳转到login.0040131B
004012C2     |. 75 57          JNZ SHORT login.0040131B                     ;  关闭密码窗口 ........00401

我现在的问题是U盘的密码应该是存放在U盘内的,是通过连接U盘然后获取的。我自己乱输入的密码ASCII 以找到了。怎么去找与U盘内存放的正确密码的比对呢?
    谢谢各位。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
004013BA     |. 83FF 10        CMP EDI,10
004013BD     |. 76 2D          JBE SHORT login.004013EC ;密码位数不大于16位.

分析了一会儿,没有原程序也弄不下去了,帖出来参考吧:
004013FE     |. 25 FF000000    AND EAX,0FF                                        ;EAX与0xFF,高位清0,后面只取AL
00401403     |. 83C4 0C        ADD ESP,0C                                        ;堆栈平衡,后面有几处都是
00401406     |. 8BF0           MOV ESI,EAX                                        ;如果不满足条件00401451处恢复EAX
00401408     |. A0 40094600    MOV AL,BYTE PTR DS:[460940]        ;在内存中不一定完全展现U盘密码,很可能取一些关键值来计算
0040140D        3C 14          CMP AL,14                    ;CMP AL,0X14 = 20 = 10100B
0040140F     |. 75 3B          JNZ SHORT login.0040144C                ;跳了就没戏
00401411     |. A0 9D0F4100    MOV AL,BYTE PTR DS:[410F9D]        ;DS:[410F9D]应该是由00404B30生成的,DS:[460940]也是
00401416     |. 50             PUSH EAX
00401417     |. E8 C4440000    CALL login.004058E0                        ;不明,反正返回EAX不能为0
0040141C     |. 83C4 04        ADD ESP,4
0040141F     |. 84C0           TEST AL,AL
00401421     |. 74 29          JE SHORT login.0040144C                ;跳了就没戏
00401423     |. 8A0D 40E74500  MOV CL,BYTE PTR DS:[45E740]        ;004013EC处把[45E740]送入了00404B30!
00401429     |. 8D5424 08      LEA EDX,DWORD PTR SS:[ESP+8]        ;假码地址送EDX
0040142D     |. 84C9           TEST CL,CL
0040142F     |. 0F94C1         SETE CL                                                ;根据ZF置CL
00401432     |. 884C24 2C      MOV BYTE PTR SS:[ESP+2C],CL        ;CL送入SS:[ESP+2C],不知什么用
00401436     |. 57             PUSH EDI                                                ;假码位数
00401437     |. 8B4424 30      MOV EAX,DWORD PTR SS:[ESP+30];SS:[ESP+30]放EAX
0040143B     |. 52             PUSH EDX                                                ;假码地址
0040143C     |. 50             PUSH EAX                                                ;对比前面这个函数的调用,用到的很可能只是低16位
0040143D     |. E8 EE360000    CALL login.00404B30                        ;调用00404B30,再次验证?
00401442     |. 83C4 0C        ADD ESP,0C
00401445     |. 25 FF000000    AND EAX,0FF
0040144A     |. 8BF0           MOV ESI,EAX
0040144C     |> E8 2F320000    CALL login.00404680
00401451     |. 8BC6           MOV EAX,ESI
00401453     |. 5F             POP EDI
00401454     |. 5E             POP ESI
00401455     |. 83C4 20        ADD ESP,20
00401458        C3             RETN
2007-11-8 22:46
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先谢谢lynns的热心帮忙!
由于程序是在USB盘上。如果COPY出来运行的话,理论上是可以的。但必须将USB盘检测那块代码强制跳转到成功。我没测试过!
004013FE     |. 25 FF000000    AND EAX,0FF          ;EAX与0xFF,高位清0,后面只取AL
00401403     |. 83C4 0C        ADD ESP,0C          ;堆栈平衡,后面有几处都是
00401406     |. 8BF0           MOV ESI,EAX          ;如果不满足条件00401451处恢复EAX
00401408     |. A0 40094600    MOV AL,BYTE PTR DS:[460940]  ;在内存中不一定完全展现U盘密码,很可能取一些关键值来计算
//ds:[0040940]=28('(')
  al=00
0040140D        3C 14          CMP AL,14                    ;CMP AL,0X14 = 20 = 10100B
0040140F     |. 75 3B          JNZ SHORT login.0040144C    ;跳了就没戏 ------ 到了这里确实没戏了直接跳到了0040144C 。
00401411     |. A0 9D0F4100    MOV AL,BYTE PTR DS:[410F9D]  ;DS:[410F9D]应该是由00404B30生成的,DS:[460940]也是
00401416     |. 50             PUSH EAX
00401417     |. E8 C4440000    CALL login.004058E0      ;不明,反正返回EAX不能为0
0040141C     |. 83C4 04        ADD ESP,4
0040141F     |. 84C0           TEST AL,AL
00401421     |. 74 29          JE SHORT login.0040144C    ;跳了就没戏
00401423     |. 8A0D 40E74500  MOV CL,BYTE PTR DS:[45E740]  ;004013EC处把[45E740]送入了00404B30!
00401429     |. 8D5424 08      LEA EDX,DWORD PTR SS:[ESP+8]  ;假码地址送EDX
0040142D     |. 84C9           TEST CL,CL
0040142F     |. 0F94C1         SETE CL            ;根据ZF置CL
00401432     |. 884C24 2C      MOV BYTE PTR SS:[ESP+2C],CL  ;CL送入SS:[ESP+2C],不知什么用
00401436     |. 57             PUSH EDI            ;假码位数
00401437     |. 8B4424 30      MOV EAX,DWORD PTR SS:[ESP+30];SS:[ESP+30]放EAX
0040143B     |. 52             PUSH EDX            ;假码地址
0040143C     |. 50             PUSH EAX            ;对比前面这个函数的调用,用到的很可能只是低16位
0040143D     |. E8 EE360000    CALL login.00404B30      ;调用00404B30,再次验证?
00401442     |. 83C4 0C        ADD ESP,0C
00401445     |. 25 FF000000    AND EAX,0FF
0040144A     |. 8BF0           MOV ESI,EAX
0040144C     |> E8 2F320000    CALL login.00404680
00401451     |. 8BC6           MOV EAX,ESI
00401453     |. 5F             POP EDI
00401454     |. 5E             POP ESI
00401455     |. 83C4 20        ADD ESP,20
00401458        C3             RETN
2007-11-9 00:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个地方忽视了:
00401432     |. 884C24 2C      MOV BYTE PTR SS:[ESP+2C],CL  ;CL送入SS:[ESP+2C]
后面又有个:
00401436     |. 57             PUSH EDI            ;!注意这时ESP-4,所以ESP+2C对应成了ESP+30,下面就把这个送进了EAX,确实只用了低16位
00401437     |. 8B4424 30      MOV EAX,DWORD PTR SS:[ESP+30];
所以CALL login.00404B30最后送进的参数很可能是标志(不是0便是1)。
共两次调用,首次调用时用的是DS:[45E740]做标志,记住这时他的值,默认为假的标志。
第二次调用时,也是从DS:[45E740]间接得来的,它很可能被某个CALL修改了
CALL login.00404B30修改了DS:[460940],他的值必须为0x28。
另外DS:[410F9D]也被00401359处CALL login.004045D0调用了。
00404B30要跟进去看看啊~~
我现在还不明白那个login.exe是怎么保护,不弹出密码框了又能怎样,……太多不明白的地方了。
2007-11-9 10:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看不明白,云里雾里
2007-11-9 11:21
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
进入00404B30 的程序段

00404B30  /$ 8B4424 0C      MOV EAX,DWORD PTR SS:[ESP+C]  
00404B34  |. 83F8 10        CMP EAX,10                               ;  假码的位数
00404B37  |. 7E 03          JLE SHORT login.00404B3C
00404B39  |. 32C0           XOR AL,AL
00404B3B  |. C3             RETN
00404B3C  |> 8A0D 9C0F4100  MOV CL,BYTE PTR DS:[410F9C]
00404B42  |. 6A 00          PUSH 0
00404B44  |. 84C9           TEST CL,CL
00404B46  |. 74 18          JE SHORT login.00404B60
00404B48  |. 8B4C24 08      MOV ECX,DWORD PTR SS:[ESP+8]
00404B4C  |. 6A 00          PUSH 0
00404B4E  |. 6A 00          PUSH 0
00404B50  |. 50             PUSH EAX
00404B51  |. 8B4424 18      MOV EAX,DWORD PTR SS:[ESP+18]
00404B55  |. 50             PUSH EAX
00404B56  |. 51             PUSH ECX
00404B57  |. E8 74EEFFFF    CALL login.004039D0
00404B5C  |. 83C4 18        ADD ESP,18
00404B5F  |. C3             RETN
2007-11-9 14:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵,谢谢仁兄的支持 不过没有原程序很难弄啊,既然OD都能载入分析,那么就DUMP一个出来吧,不必要可以运行的,能够静态分析就够了。
2007-11-9 16:47
0
雪    币: 252
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
同志,用作光盘镜像的方法搞个镜像出来不就行了啊,把景象放出来给大家参考
2007-11-9 18:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=;]...[/QUOTE]
楼上的办法不错!!!
2007-11-9 18:52
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
  先谢谢了,在论坛里我没法上传文件。请你留我Email 给我。 我把程序发给你。
2007-11-10 09:49
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
请各位大哥 继续帮忙。谢谢
我对DeviceIoControl 中的dwIoControlCode定义不是很清楚
0040315D  |> 8B1D 1CB04000  MOV EBX,DWORD PTR DS:[<&KERNEL32.DeviceIoControl>]     ;  kernel32.DeviceIoControl
00403176  |. 6A 00          |PUSH 0
00403178  |. 52             |PUSH EDX 0012F910
00403179  |. 57             |PUSH EDI 0000002C
0040317A  |. 56             |PUSH ESI 00460800
0040317B  |. 55             |PUSH EBP 0000002C
0040317C  |. 56             |PUSH ESI 00460800
0040317D  |. 50             |PUSH EAX 0004D014
0040317E  |. 51             |PUSH ECX 00000108
0040317F  |. FFD3           |CALL EBX
2007-11-10 22:37
0
游客
登录 | 注册 方可回帖
返回