逆向分析-010editor算法

系统环境:win10 64位

工具:吾爱专用OD、IDA

  1. 分析目标
    1.暴力破解,去注册弹窗
    2.分析算法,写注册机
    3.去网络验证

  2. 具体分析过程
    2.1 过弹窗检测
    输入伪码
    Username:123456
    Password:11223344556677889900

弹窗了。由于我自己之前分析过适合破解新手的160个crackme练手.chm的前三个程序并且也写出了注册机。

我自己在吾爱也发了贴,ID:赤坂理子

所以这里有两个思路,一个是下API断点,和字符串搜索。
下API断点首先要使用工具知道它是什么程序
拖进PEID看导入表,有很多QT的库,那就是用QT写的
不过没关系,底层都是SDK的API,耐心点可以找到关键点。
我觉得麻烦直接搜索字符串了。
Invalid name or password

然后往上找关键跳
改JCC指令,就爆破了。

2.2 去弹窗
每次打开都要弹窗就很繁琐了。
我去关键跳转的地方分析一下,发现EDI是与0xDB做比较,不等于就跳转到错误的地方了。
那就往上分析一下看那个函数传出了参数改变了EDI。

观察到

那好办了,我去函数里面把返回值改成BD就好了
成功了!保存文件再打开就没有弹窗了!

2.3 分析算法
那就一步一步往上分析呗,先从那两个需要比较返回值的函数开始。
先看传出0xDB的函数,分析分析需要什么条件才能传出DB。
这个函数参数是0x4596、0xA暂时不知道干嘛的

返回值是DB才正确
看到内部里有个函数,传出2D,才能传出DB

进去这个函数分析一下
先大概走一遍,发现会取出username的各个部分做对比,任何不满足的地方之间跳出去报错。
从这里开始就需要逐行分析了。

图下是我在OD的注释

图一、
在这里插入图片描述

图二、

在这里插入图片描述

得到部分算法过程了,先写一下测试代码。

1.	#include <iostream>  
2.	#include<windows.h>  
3.	#include <time.h>  
4.	int main()  
5.	{  
6.	    while (true)  
7.	    {  
8.	        srand(time(NULL));  
9.	        byte k[10] = { 0x11,0x22,0x33 ,0x9C ,0x55 ,0x66 ,0x77,0x88,0x99,0xAA };  
10.	        while (true)  
11.	        {  
12.	            byte k0 = rand() & 0xff;  
13.	            byte k6 = rand() & 0xff;  
14.	            byte al = (((k0 ^ k6) ^ 0x18) + 0x3D) ^ 0xA7;  
15.	            if (al > 0)  
16.	            {  
17.	                k[0] = k0;  
18.	                k[6] = k6;  
19.	                break;  
20.	            }  
21.	        }  
22.	        while (true)  
23.	        {  
24.	            byte k1 = rand() & 0xff;  
25.	            byte k7 = k[7];  
26.	            byte k2 = rand() & 0xff;  
27.	            byte k5 = k[5];  
28.	            DWORD ESI = (((k1 ^ k7 & 0xff) * 0x100) + (k2 ^ k5 & 0xff)) & 0xffff;  
29.	            DWORD EAX = ((((ESI ^ 0x7892) + 0x4D30) ^ 0x3421) & 0xffff);  
30.	            if (EAX % 0xB == 0)  
31.	            {  
32.	                k[1] = k1;  
33.	                k[2] = k2;  
34.	                break;  
35.	            }  
36.	        }  
37.	        for (size_t i = 0; i < 10; i++)  
38.	        {  
39.	            printf("%02X", k[i]);  
40.	            if (i % 2 != 0 && i != 9)  
41.	            {  
42.	                printf("-");  
43.	            }  
44.	            if (i == 9)  
45.	            {  
46.	                printf("\n\n\n");  
47.	            }  
48.	        }  
49.	        getchar();  
50.	    }  
51.	}  

在这里插入图片描述

这里面大概就是对username进行了别的操作,然后传出了密钥。
打开IDA,按下F5
把这里的代码拖出来,发现可以当做一个函数使用

2.4 过网络监测
这里就是之前传出DB的函数里面最开始监测的东西,这里只能打补丁了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值