最近有个找出个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直播授课