010逆向具体分析过程 1.初步分析
通过DIE对文件进行解析
解析结果: 开发环境vs2013
开发平台QT
连接器版本12.0
32位程序
未加保护
2.开始分析随机注册尝试
弹出提示对话框 提示账号或密码错误
猜测切入点:
(1、 通过MessageBox 进行API 断点进行回溯
(2、 通过字符串查找关键字符串 然后进一步分析
执行(1
经过寻找无可用信息
执行(2
寻找到了相同字符
通过分析前后文
确认此处为关键 具有成功与失败弹窗的函数调用
跟踪成功弹窗 逆向分析
发现 当EBX == 0X93 是 弹出成功弹窗 否则探出失败窗口
继续向上回溯
当EDI == 0X2DC || EDI == 0XED时也会直接跳转至失败
跟踪 EBX 与 EDI
发现在此处两个函数返回值分别赋值给了EBX 与 EDI
且分析逻辑发现
当 EDI == 0x71
EBX == 0x93
或
EDI == 0xdb
时 可以返成功注册
方法1:直接修改 函数返回值 使EDI == 0Xdb
方法2:不对代码进行强制修改,试着逆向分析出注册码算法 编写注册机
获取正确注册码进行注册
对函数进行逆向分析,查看其在什么情况可以返回正确的值 发现0x00409c9b在返回0xdb时成功
(1、 对0x00409c9b 地址处的函数进行分析 查看其在什么情况下返回0xdb分析得出当地址0x0040a826的出的函数返回0x2d时 此函数返回正确的值
分析地址0x40A826处的函数 在什么时候返回0x2d
通过对其进行分析,发现其获取了秘钥,并验证秘钥第四位是否为0x9C、0xFC、0xAC三个中的一个,所以第四位是固定的。取秘钥第四位为0xFC时,获取其他位置秘钥算法。 第二部是获取了用户名,通过hash计算,获取了一个key值,然后将部分秘钥对应位置的值与其进行比较,最终满足条件后返回0x2D.
通过一步一的逆行分析
最终得出相关算法
|