huzpsb 发表于 2019-11-13 20:45

萌新,求助一个破解的问题

如题,我在尝试弄学校机房的增霸卡时,想搞出密码来
先标操,断在GetWindowTextA

然后F8追踪,死盯我输入的假密码

也的确成功定位了比较的call

也的确可以爆破了,但是我想追密码,
于是就IDA定位了毒瘤函数

老套路F5,

然后就蒙了
真的蒙了
越追越蒙


完全看不懂什么是比较
(本来以为是在retn前面的比较那里int3就好了的)
所以,请问各位大佬,这咋整啊?
附件:
万恶的那个库:
https://www.lanzouj.com/i7cf9ud

2Burhero 发表于 2019-11-13 20:58

来人护驾,我路过围观

一米丶阳光 发表于 2019-11-14 18:02

基于你的分析,我给你提供我的思路,我不上图了,尽量给你描述的详细点:
1. 如果CDrvObject::PasswordsAction的返回结果是对密码的校验结果,那么关键函数就是CZbkObject::PasswordsAction里的DeviceIoControl
2. DeviceIoControl的第一个参数来源于CZbkObject::Initial函数,是指向主硬盘的文件描述符
3. 第二个参数是关键中的关键,第二个参数有一个生成规则
#define CTL_CODE(DeviceType, Function, Method, Access) (
  ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
)
目前可以确定的是DeviceType是0x7对应
#define FILE_DEVICE_DISK    0x00000007
这也印证了第一个参数
到这问题来了,无法确定Function是什么,也就不知道这个函数具体执行的是什么逻辑(经查文档,无果),你可以继续按照这个思路,去找Function。我猜测是根据输入的字符串跟输入地址的硬盘扇区的内容进行对比,如果相等就返回一个长度为24的buff,基于这个思路,既然要比较,那肯定要事先写好,所以才有下面的思路
4. 第二个思路,IDA中观察CZbkObject这个类的函数列表,看到了几个比较敏感的函数名字
CZbkObject::SetWindowsPasswords
CZbkObject::WriteSectors
CZbkObject::ReadSectors
CZbkObject::ReadMultiSectors
CZbkObject::WriteMultiSectors
你那可以调试,可以试着调一下这几个函数,看看他往目标扇区里写了啥,或许能找到密码

最后,祝你好运~

liu2514 发表于 2019-11-13 21:03

我也就能到:“也的确成功定位了比较的call”这一步。。。

小菜鸟一枚 发表于 2019-11-13 21:06

完全看不懂,萌新的我瑟瑟发抖!{:1_909:},另外请教下大佬,压缩包里面只有一个dll文件吗?这个是怎么运行的{:1_904:},没学过编程,不懂怎么操作!

huzpsb 发表于 2019-11-13 21:31

liu2514 发表于 2019-11-13 21:03
我也就能到:“也的确成功定位了比较的call”这一步。。。

真的烦啊
爆破没有技术难度
可是没有意思啊

就是他 发表于 2019-11-13 21:34

萌新也要分层次啊。。。。。

乐灿峰 发表于 2019-11-13 22:11

蒙什么?这不是都出来答案了吗

huzpsb 发表于 2019-11-13 22:58

乐灿峰 发表于 2019-11-13 22:11
蒙什么?这不是都出来答案了吗

我要的是密码,明文的
不是爆破

hjm666 发表于 2019-11-14 09:01

提供一个思路,在断下了GetWindowTextA且在输入了伪密码后能断下,说明确实断下的的确是获取输入密码的模块,这样你获得了获取输入密码模块的地址,这时候你因该在OD里执行到返回跳出获取密码的模块,跳出后十有八九是对密码进行验证的函数,你因该去IDA里F5这个验证的函数,然后再看是哪个关键跳导致程序返回密码错误,再回溯代码看哪里调用了函数验证密码找真正的密码

huzpsb 发表于 2019-11-14 12:33

hjm666 发表于 2019-11-14 09:01
提供一个思路,在断下了GetWindowTextA且在输入了伪密码后能断下,说明确实断下的的确是获取输入密码的模块 ...

已经IDA定位函数了,但是没有看到比较函数
页: [1] 2
查看完整版本: 萌新,求助一个破解的问题