吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2760|回复: 4
上一主题 下一主题
收起左侧

[会员申请] 申请会员ID:854619267

  [复制链接]
跳转到指定楼层
楼主
吾爱游客  发表于 2015-4-12 14:29 回帖奖励 |自己
1. 申请ID:854619267
2. 邮箱:854619267@qq.com

3.原创破解作品飚王移动硬盘盒解密程序密码恢复
http://bbs.pediy.com/showthread.php?t=140424
IDA, lucida grande, arial, helvetica, sans-serif">



【软件大小】: 2.87M
【下载地址】: 自己搜索下载
【加壳方式】: 无壳
【保护方式】: 无保护
【编写语言】: MFC...VC6
【使用工具】: PEID,OD,LordPE
【软件介绍】: 飚王移动硬盘盒的配套程序,用来实现对硬盘加密存储功能。

【作者声明】: 只谈技术,共同提高,欢迎批评指正


原程序是飚王移动硬盘盒的配套程序。加密存储的原理是对硬盘的一个分区隐藏。
解密的时候,用户输入密码后,如果密码正确的话,就把隐藏的分区显示出来(原理只是猜想)。。
这里有个问题,时间长了一旦把密码忘记了,那就悲剧了,因为这个软件没有找回密码的功能。。这种情况下,对密码进行恢复就十分必要。


说明:
1 必须插上加密处理后的移动硬盘,再运行这个程序,按钮才有效,否者按钮是灰的


[tr][/tr]
正文:
运行之,发现输入密码错误后有MessageBox提示,太好了,就从这里入手吧

运行后,随便输入个错误的密码,弹出对话框后,不要关闭,od附加之,

查看调用堆栈.找到调用messageBox的函数,分析之.




贴出关键汇编代码:
00401D30    6A FF           PUSH -100401D32    68 C6116000     PUSH DiskLock.006011C600401D37    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]00401D3D    50              PUSH EAX00401D3E    64:8925 0000000>MOV DWORD PTR FS:[0],ESP00401D45    81EC F4010000   SUB ESP,1F400401D4B    55              PUSH EBP00401D4C    56              PUSH ESI00401D4D    8BF1            MOV ESI,ECX00401D4F    57              PUSH EDI00401D50    33ED            XOR EBP,EBP00401D52    B9 0A000000     MOV ECX,0A00401D57    33C0            XOR EAX,EAX00401D59    8D7C24 0E       LEA EDI,DWORD PTR SS:[ESP+E]00401D5D    66:896C24 0C    MOV WORD PTR SS:[ESP+C],BP00401D62    F3:AB           REP STOS DWORD PTR ES:[EDI]00401D64    66:AB           STOS WORD PTR ES:[EDI]00401D66    83BE 38100000 0>CMP DWORD PTR DS:[ESI+1038],100401D6D    0F84 08020000   JE DiskLock.00401F7B00401D73    6A 08           PUSH 800401D75    8BCE            MOV ECX,ESI00401D77    E8 34060000     CALL DiskLock.004023B000401D7C    83BE 38100000 0>CMP DWORD PTR DS:[ESI+1038],300401D83    0F85 9B010000   JNZ DiskLock.00401F2400401D89    6A 03           PUSH 300401D8B    8BCE            MOV ECX,ESI00401D8D    E8 1E060000     CALL DiskLock.004023B000401D92    8D4424 0C       LEA EAX,DWORD PTR SS:[ESP+C]00401D96    8DBE 58100000   LEA EDI,DWORD PTR DS:[ESI+1058]00401D9C    50              PUSH EAX00401D9D    57              PUSH EDI00401D9E    FF15 80046200   CALL DWORD PTR DS:[<&uDiskTool.?uReadPas>;uDiskToo.?uReadPasswordinSectorEx@@YAHPAG0@Z  00401DA4    83C4 08         ADD ESP,800401DA7    85C0            TEST EAX,EAX00401DA9    0F84 76030000   JE DiskLock.0040212500401DAF    6A 05           PUSH 500401DB1    8BCE            MOV ECX,ESI00401DB3    E8 F8050000     CALL DiskLock.004023B000401DB8    8D4C24 0C       LEA ECX,DWORD PTR SS:[ESP+C]00401DBC    51              PUSH ECX00401DBD    FF15 98006200   CALL DWORD PTR DS:[<&MSVCRT.wcslen>]     ;msvcrt.wcslen00401DC3    83C4 04         ADD ESP,400401DC6    85C0            TEST EAX,EAX00401DC8    0F86 4A010000   JBE DiskLock.00401F1800401DCE    55              PUSH EBP00401DCF    8D8C24 20010000 LEA ECX,DWORD PTR SS:[ESP+120]00401DD6    E8 A5100000     CALL DiskLock.00402E8000401DDB    8D8C24 1C010000 LEA ECX,DWORD PTR SS:[ESP+11C]00401DE2    89AC24 08020000 MOV DWORD PTR SS:[ESP+208],EBP00401DE9    E8 90160000     CALL <JMP.&MFC42u.#2506>00401DEE    48              DEC EAX00401DEF    74 4C           JE SHORT DiskLock.00401E3D00401DF1    48              DEC EAX00401DF2    75 7A           JNZ SHORT DiskLock.00401E6E00401DF4    8D8C24 C0010000 LEA ECX,DWORD PTR SS:[ESP+1C0]00401DFB    C78424 08020000>MOV DWORD PTR SS:[ESP+208],400401E06    E8 33170000     CALL <JMP.&MFC42u.#795>00401E0B    8D8C24 7C010000 LEA ECX,DWORD PTR SS:[ESP+17C]00401E12    C68424 08020000>MOV BYTE PTR SS:[ESP+208],300401E1A    E8 A9170000     CALL <JMP.&MFC42u.#656>00401E1F    8D8C24 1C010000 LEA ECX,DWORD PTR SS:[ESP+11C]00401E26    C78424 08020000>MOV DWORD PTR SS:[ESP+208],-100401E31    E8 0E170000     CALL <JMP.&MFC42u.#641>00401E36    33C0            XOR EAX,EAX00401E38    E9 26010000     JMP DiskLock.00401F6300401E3D    6A 03           PUSH 300401E3F    8BCE            MOV ECX,ESI00401E41    E8 6A050000     CALL DiskLock.004023B000401E46    55              PUSH EBP00401E47    57              PUSH EDI00401E48    8BCE            MOV ECX,ESI00401E4A    E8 01060000     CALL DiskLock.0040245000401E4F    83F8 01         CMP EAX,100401E52    75 61           JNZ SHORT DiskLock.00401EB500401E54    6A 02           PUSH 200401E56    8BCE            MOV ECX,ESI00401E58    E8 53050000     CALL DiskLock.004023B000401E5D    57              PUSH EDI00401E5E    8BCE            MOV ECX,ESI00401E60    E8 FB040000     CALL DiskLock.0040236000401E65    6A 05           PUSH 500401E67    8BCE            MOV ECX,ESI00401E69    E8 42050000     CALL DiskLock.004023B000401E6E    8D8C24 C0010000 LEA ECX,DWORD PTR SS:[ESP+1C0]00401E75    C78424 08020000>MOV DWORD PTR SS:[ESP+208],600401E80    E8 B9160000     CALL <JMP.&MFC42u.#795>00401E85    8D8C24 7C010000 LEA ECX,DWORD PTR SS:[ESP+17C]00401E8C    C68424 08020000>MOV BYTE PTR SS:[ESP+208],500401E94    E8 2F170000     CALL <JMP.&MFC42u.#656>00401E99    8D8C24 1C010000 LEA ECX,DWORD PTR SS:[ESP+11C]00401EA0    C78424 08020000>MOV DWORD PTR SS:[ESP+208],-100401EAB    E8 94160000     CALL <JMP.&MFC42u.#641>00401EB0    E9 95000000     JMP DiskLock.00401F4A00401EB5    8B96 50100000   MOV EDX,DWORD PTR DS:[ESI+1050]00401EBB    6A 30           PUSH 3000401EBD    55              PUSH EBP00401EBE    8B42 0C         MOV EAX,DWORD PTR DS:[EDX+C]00401EC1    50              PUSH EAX00401EC2    55              PUSH EBP00401EC3    FF15 A0036200   CALL DWORD PTR DS:[<&USER32.MessageBoxW>>;USER32.MessageBoxW00401EC9    6A 05           PUSH 5

发现00401D9E   处调用uDiskToo.?uReadPasswordinSectorEx@@YAHPAG0@Z,从函数名字上可以意会到这个是读密码的函数,这里F2下断点, Ctrl+F2,运行后,停在这里:
EAX=0012E168,在数据窗口看出这个地址的内容为0,是128大小的缓冲区,
EDI=0012FCB4, 也是缓冲区,内容是”//./PhysicalDrive1”.

单步走,走过这个函数,发现00401D9E这里正是存放的明文密码,
到这里,密码找到了。这里,密码虽然找到了,但是整个过程是在od调试器里完成的。我们可以额外的做一些工作,让程序直接把密码弹出来。





下面修改这个程序,目标是让这个程序自动弹出一个MessageBox,把密码显示出来.
还是原来的地方,密码是以明文字符串的形式存在的,我们只要把字符串首地址和其他一些参数压栈后调用
MessageBoxW函数即可达到目的。
MessageBoxW函数在user32.dll里。要调用messagebox,就得知道这个函数的地址,幸好有工具可以查到函数的地址。
用lordpe打开这个程序, Lordpe&#61664;PE editor,Directories->importTable,找到user32.dll(如果原来的程序的导入表里没有这个dll的话,lordpe可以手动把dll添加进去),在下面找MessageBoxW函数,勾上FirstTrunk,记下函数地址002203a0.  


要完成目标,还要知道messagebox函数的参数
查msdn,
int MessageBox(
  HWND hWnd,          // handle of owner window
  LPCTSTR lpText,     // address of text in message box
  LPCTSTR lpCaption,  // address of title of message box
  UINT uType          // style of message box
);

好了,有了上面的信息,下面开始修改程序,让它自动显示出密码.

观察00401DBC处,PUSH ECX CALL DWORD PTR DS:[<MSVCRT.wcslen>],这里ecx就是存放密码的缓冲区地址,用它作为messagebox的lpText参数即可

OK,下面开始修改,把光标移到00401dbc处,按空格键,依次输入以下代码:
Push 0 ;MB_OK宏的值就是0
Push 0; lpText
Push ecx ; lpCaption
Push 0 ; hWnd
CALL DWORD PTR DS:[6203A0]; 6203A0 = 002203a0加上基址00400000
CALL DWORD PTR DS:[6200B8];这个是msvcrt.dll中的exit函数.
显示完messagebox后就调用exit退出

大功告成,保存,运行,成功显示出密码





小弟现在还是个穷学生,期待在论坛里成长,希望能获得会员!!




发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
Hmily 发表于 2015-4-12 22:58
过程有点简单了哦,有没有技术含量更高的内容?比如他密码存在哪?算法是怎么样的?
3#
1050577957 发表于 2015-4-12 23:07
4#
Ssking 发表于 2015-4-12 23:34 来自手机
Hmily 发表于 2015-4-12 22:58
过程有点简单了哦,有没有技术含量更高的内容?比如他密码存在哪?算法是怎么样的?

还是老大有办法,我在看雪给他发消息了看他是否回复

点评

我不是确认是不是他发的,而是这个申请内容过于简单。  详情 回复 发表于 2015-4-12 23:49
5#
Hmily 发表于 2015-4-12 23:49
Ssking 发表于 2015-4-12 23:34
还是老大有办法,我在看雪给他发消息了看他是否回复

我不是确认是不是他发的,而是这个申请内容过于简单。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 06:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表