1.样本概况

1.1 应用程序信息

应用程序名称:010Editor801.exe

MD5值:0A34A58D5314C83273710B57F3CB8B53

SHA1值:849ED2027B4F40BF5BF85A638E54D15C05C87E29

1.2 分析环境及工具

系统环境: 十五派信息安全教育实验环境win7专业版 32位

工具: Ollydbg(动态调试代码)、

IDA Pro(静态调试代码)、

LordPE/PEID/Exeinfo PE(PE工具、查壳、查编译环境)、

Vistual Studio 2019(开发环境)

1.3 分析目标

对程序进行暴力破解过验证

对分析算法编写注册机过验证

2.具体分析过程

2.1 样本详细

2.1.1 启动程序

通过Exeinfo PE我们可以看出010Editor这个程序是使用QT编写的程序

2.1.2 注册界面

我们随便输入一段用户名和密码之后,弹出失败对话框。

2.2 敏感字符串

2.2.1 查找通过敏感字符串

我们通过注册失败的对话框直接搜索字符串进行查找,这里继续通过对话框进行查找,我们对CreateWindowEx进行下断分析。

在点击Check License按钮之后,通过栈回溯发现在这个位置有敏感字符的关键信息

2.2.2 通过敏感字符串查找关键代码

在这个位置继续分析代码发现向下的关键跳转位置,而CMP EDI,0xDB是决定这个跳转的关键数据,继续往上分析

通过继续逆向分析代码我们来找这段代码区域,通过初步分析推断是关于网络验证和账号密码算法相关的区域

2.2.3 修改关键跳转暴力破解

根据目前分析的结果我们现在可以通过修改指令进行暴力破解,通过关键跳转可以看到在网络验证完毕之后会跳到关键跳转的位置,我们直接将JE修改为JMP,当跳到关键跳转的时候,直接越过对比的结果,不进行跳转,将跳转用NOP填充掉,就完成了暴力破解。这个位置如果进行跳转就会提示失败的信息。

网络验证位置的信息跳转

判断失败的关键跳转

爆破结果通过验证

2.3 算法

2.3.1分析相关函数

我们分析这个CALL是相关算法的代码,我们跟进去对改代码进行解析

我们在这个CALL中发现指向用户名和密码存储地址的指针,在下面的指令地址中发现调用用户名的信息,还有密码的信息

2.3.2 密码算法相关的

这段代码上来将密码的第三个元素和第五个元素赋值给了BL 和 BH 并且密码第三个元素必须等于0x9C,0xFC,0xAC这个三个值的其中一个。

通过解析第一个CALL先处理的处理k[0]和k[6]的数据 AL = (((k[0] ^ k[6]) ^ 0x18) + 0x3D) ^ 0xA7。

第二个CALL处理的是PUSH ESI = ((k[1] ^ k[7] & 0xFF) + (k[2] ^ k[5] & 0xFF)) & 0xFFFF

EAX = (((((((k[1] ^ k[7] & 0xFF) + (k[2] ^ k[5] & 0xFF)) & 0xFFFF) ^ 0x7892) + 0x4D30) ^ 0x3421)&FFFF)/0xB 计算后判断余数为0返回商,否则返回0

下面的跳转根据两组CALL的返回值进行跳转

2.3.3 密码算法验证

srand(time(NULL));int dwRet = 0x3E8;byte k[10] = { 0x11,0x22,0x33,0x9c,0x55,0x66,0x77,0x88,0x99,0xAA };//用户名经过加密DWORD dwKey = EnCodeUsername("www.15pb.com", 1, 0, dwRet);k[4] = dwKey & 0xFF;k[5] = dwKey >> 0x8 & 0xFF;k[6] = dwKey >> 0x10 & 0xFF;k[7] = dwKey >> 0x18 & 0xFF;//处理k[0]和k[6]的数据 AL = (((k[0] ^ k[6]) ^ 0x18) + 0x3D) ^ 0xA7while (true){byte k0 = rand() % 0xFF;byte k6 = rand() % 0xFF;byte AL = (((k0 ^ k6) ^ 0x18) + 0x3D) ^ 0xA7;if (AL >= 9){k[0] = k0;k[6] = k6;break;}}//PUSH ESI = (((k[1] ^ k[7] & 0xFF) * 0x100) + (k[2] ^ k[5] & 0xFF)) & 0xFFFF//EAX = ((((ESI ^ 0x7892) + 0x4D30) ^ 0x3521)&FFFF)/0xB //计算后判断余数为0返回商,否则返回0while (true){byte k1 = rand() % 0xFF;byte k2 = rand() % 0xFF;byte k5 = rand() % 0xFF;byte k7 = rand() % 0xFF;DWORD ESI = (((k1 ^ k7 & 0xFF) * 0x100) + (k2 ^ k5 & 0xFF)) & 0xFFFF;DWORD EAX = ((((ESI ^ 0x7892) + 0x4D30) ^ 0x3421) & 0xFFFF);if (EAX % 0xB == 0 && EAX / 0xB <= dwRet){k[1] = k1;k[2] = k2;k[5] = k5;k[7] = k7;break;}
}

通过对密码的验证,此段代码是计算密码的算法。

2.3.4 账户算法相关的

下面对账户的算法进行解析,我们在这个过程中通过函数将账户转换为ASCII码,[EDI+0x20]这个位置对应着之前第二CALL计算后的商,

关键用户名算法CALL位置我们直接用IDA Pro去分析,这个位置算完之后会给出类似于hash值一样的东西。然后下面运算过程不断对账号进行右移与密码k[4]、k[5]、k[6]、k[7]对比,然后再对之前PUSH进来的参数做对比,我们可以看出密码和账号名称息息相关,账号名称决定了密码k[4]、k[5]、k[6]、k[7]这四个值

我们先对这个CALL的地址算出文件偏移

我们直接F5将代码转变为C语言的代码,然后对其代码进行简单修改便于理解,我们直接将代码复制出来,然后去我们的注册机程序中构造

这个位置有个数组我们不知道这个数组大约是多少,我们可以直接去OD中将或者数组复制出来,复制的时候要注意文件的偏移

2.3.5 账户算法验证

因为这个位置已经可以实现注册机的功能,将代码放在代码实现的位置

代码可以带我们跳过所有判断走向正确的跳转,说明算法是可行的

2.4 跳过网络验证

2.4.1网络验证一

在这个位置有两个网络验证,即便注册机可以使用,但是网络验证最快捷的方法就是直接越过

第一个网络验证需要EDI = DB在后面判断中,我们需要将JE直接改为JMP跳到赋值的位置

2.4.2网络验证二

第二个网络验证是需要返回值不为0,但这个函数是关于网络验证的,我们分析需要大量时间,这个位置直接在开始的位置MOV EAX,0x1,RETN 0x4

通过这几步修改我们实现了跳过网络验证

2.4.3 跳过网络验证验证

2.5 代码实现

下面为代码实现

#include <iostream>
#include <Windows.h>
#include <time.h>
DWORD g_EcodeArray[] = {0x39cb44b8, 0x23754f67, 0x5f017211, 0x3ebb24da, 0x351707c6, 0x63f9774b, 0x17827288, 0x0fe74821, 0x5b5f670f, 0x48315ae8, 0x785b7769, 0x2b7a1547, 0x38d11292, 0x42a11b32, 0x35332244, 0x77437b60,0x1eab3b10, 0x53810000, 0x1d0212ae, 0x6f0377a8, 0x43c03092, 0x2d3c0a8e, 0x62950cbf, 0x30f06ffa, 0x34f710e0, 0x28f417fb, 0x350d2f95, 0x5a361d5a, 0x15cc060b, 0x0afd13cc, 0x28603bcf, 0x3371066b,0x30cd14e4, 0x175d3a67, 0x6dd66a13, 0x2d3409f9, 0x581e7b82, 0x76526b99, 0x5c8d5188, 0x2c857971, 0x15f51fc0, 0x68cc0d11, 0x49f55e5c, 0x275e4364, 0x2d1e0dbc, 0x4cee7ce3, 0x32555840, 0x112e2e08,0x6978065a, 0x72921406, 0x314578e7, 0x175621b7, 0x40771dbf, 0x3fc238d6, 0x4a31128a, 0x2dad036e, 0x41a069d6, 0x25400192, 0x00dd4667, 0x6afc1f4f, 0x571040ce, 0x62fe66df, 0x41db4b3e, 0x3582231f,0x55f6079a, 0x1ca70644, 0x1b1643d2, 0x3f7228c9, 0x5f141070, 0x3e1474ab, 0x444b256e, 0x537050d9, 0x0f42094b, 0x2fd820e6, 0x778b2e5e, 0x71176d02, 0x7fea7a69, 0x5bb54628, 0x19ba6c71, 0x39763a99,0x178d54cd, 0x01246e88, 0x3313537e, 0x2b8e2d17, 0x2a3d10be, 0x59d10582, 0x37a163db, 0x30d6489a, 0x6a215c46, 0x0e1c7a76, 0x1fc760e7, 0x79b80c65, 0x27f459b4, 0x799a7326, 0x50ba1782, 0x2a116d5c,0x63866e1b, 0x3f920e3c, 0x55023490, 0x55b56089, 0x2c391fd1, 0x2f8035c2, 0x64fd2b7a, 0x4ce8759a, 0x518504f0, 0x799501a8, 0x3f5b2cad, 0x38e60160, 0x637641d8, 0x33352a42, 0x51a22c19, 0x085c5851,0x032917ab, 0x2b770ac7, 0x30ac77b3, 0x2bec1907, 0x035202d0, 0x0fa933d3, 0x61255df3, 0x22ad06bf, 0x58b86971, 0x5fca0de5, 0x700d6456, 0x56a973db, 0x5ab759fd, 0x330e0be2, 0x5b3c0ddd, 0x495d3c60,0x53bd59a6, 0x4c5e6d91, 0x49d9318d, 0x103d5079, 0x61ce42e3, 0x7ed5121d, 0x14e160ed, 0x212d4ef2, 0x270133f0, 0x62435a96, 0x1fa75e8b, 0x6f092fbe, 0x4a000d49, 0x57ae1c70, 0x004e2477, 0x561e7e72,0x468c0033, 0x5dcc2402, 0x78507ac6, 0x58af24c7, 0x0df62d34, 0x358a4708, 0x3cfb1e11, 0x2b71451c, 0x77a75295, 0x56890721, 0x0fef75f3, 0x120f24f1, 0x01990ae7, 0x339c4452, 0x27a15b8e, 0x0ba7276d,0x60dc1b7b, 0x4f4b7f82, 0x67db7007, 0x4f4a57d9, 0x621252e8, 0x20532cfc, 0x6a390306, 0x18800423, 0x19f3778a, 0x462316f0, 0x56ae0937, 0x43c2675c, 0x65ca45fd, 0x0d604ff2, 0x0bfd22cb, 0x3afe643b,0x3bf67fa6, 0x44623579, 0x184031f8, 0x32174f97, 0x4c6a092a, 0x5fb50261, 0x01650174, 0x33634af1, 0x712d18f4, 0x6e997169, 0x5dab7afe, 0x7c2b2ee8, 0x6edb75b4, 0x5f836fb6, 0x3c2a6dd6, 0x292d05c2,0x052244db, 0x149a5f4f, 0x5d486540, 0x331d15ea, 0x4f456920, 0x483a699f, 0x3b450f05, 0x3b207c6c, 0x749d70fe, 0x417461f6, 0x62b031f1, 0x2750577b, 0x29131533, 0x588c3808, 0x1aef3456, 0x0f3c00ec,0x7da74742, 0x4b797a6c, 0x5ebb3287, 0x786558b8, 0x00ed4ff2, 0x6269691e, 0x24a2255f, 0x62c11f7e, 0x2f8a7dcd, 0x643b17fe, 0x778318b8, 0x253b60fe, 0x34bb63a3, 0x5b03214f, 0x5f1571f4, 0x1a316e9f,0x7acf2704, 0x28896838, 0x18614677, 0x1bf569eb, 0x0ba85ec9, 0x6aca6b46, 0x1e43422a, 0x514d5f0e, 0x413e018c, 0x307626e9, 0x01ed1dfa, 0x49f46f5a, 0x461b642b, 0x7d7007f2, 0x13652657, 0x6b160bc5,0x65e04849, 0x1f526e1c, 0x5a0251b6, 0x2bd73f69, 0x2dbf7acd, 0x51e63e80, 0x5cf2670f, 0x21cd0a03, 0x5cff0261, 0x33ae061e, 0x3bb6345f, 0x5d814a75, 0x257b5df4, 0x0a5c2c5b, 0x16a45527, 0x16f23945
};
int __cdecl EnCodeUsername(const char* pstrUserName, int a2, char a3, unsigned __int16 a4)
{const char* v4; // edx@1signed int v5; // esi@1signed int v6; // edi@1unsigned __int8 v7; // bl@2int v8; // eax@3int v9; // ecx@3int v10; // ecx@4int result; // eax@4int v12; // ecx@5unsigned __int8 v13; // [sp+8h] [bp-10h]@2unsigned __int8 v14; // [sp+Ch] [bp-Ch]@2unsigned __int8 v15; // [sp+10h] [bp-8h]@2int v16; // [sp+14h] [bp-4h]@1v4 = pstrUserName;v16 = 0;v5 = strlen(pstrUserName);v6 = 0;if (v5 <= 0){result = 0;}else{v13 = 0;v14 = 0;v7 = 15 * a4;v15 = 17 * a3;do{v8 = toupper(v4[v6]);v9 = v16 + g_EcodeArray[v8];if (a2){v10 = g_EcodeArray[v7]+ g_EcodeArray[v15]+ g_EcodeArray[(unsigned __int8)(v8 + 47)] * (g_EcodeArray[(unsigned __int8)(v8 + 13)] ^ v9);result = g_EcodeArray[v14] + v10;v16 = g_EcodeArray[v14] + v10;}else{v12 = g_EcodeArray[v7]+ g_EcodeArray[v15]+ g_EcodeArray[(unsigned __int8)(v8 + 23)] * (g_EcodeArray[(unsigned __int8)(v8 + 63)] ^ v9);result = g_EcodeArray[v13] + v12;v16 = g_EcodeArray[v13] + v12;}v14 += 19;++v6;v15 += 9;v7 += 13;v13 += 7;v4 = pstrUserName;} while (v6 < v5);}return result;
}
int main()
{srand(time(NULL));int dwRet = 0x3E8;byte k[10] = { 0x11,0x22,0x33,0x9c,0x55,0x66,0x77,0x88,0x99,0xAA };//用户名经过加密DWORD dwKey = EnCodeUsername("www.15pb.com", 1, 0, dwRet);k[4] = dwKey & 0xFF;k[5] = dwKey >> 0x8 & 0xFF;k[6] = dwKey >> 0x10 & 0xFF;k[7] = dwKey >> 0x18 & 0xFF;//处理k[0]和k[6]的数据 AL = (((k[0] ^ k[6]) ^ 0x18) + 0x3D) ^ 0xA7while (true){byte k0 = rand() % 0xFF;byte k6 = k[6];byte AL = (((k0 ^ k6) ^ 0x18) + 0x3D) ^ 0xA7;if (AL >= 9){k[0] = k0;k[6] = k6;break;}}//PUSH ESI = (((k[1] ^ k[7] & 0xFF) * 0x100) + (k[2] ^ k[5] & 0xFF)) & 0xFFFF//EAX = ((((ESI ^ 0x7892) + 0x4D30) ^ 0x3521)&FFFF)/0xB //计算后判断余数为0返回商,否则返回0while (true){byte k1 = rand() % 0xFF;byte k2 = rand() % 0xFF;byte k5 = k[5];byte k7 = k[7];DWORD ESI = (((k1 ^ k7 & 0xFF) * 0x100) + (k2 ^ k5 & 0xFF)) & 0xFFFF;DWORD EAX = ((((ESI ^ 0x7892) + 0x4D30) ^ 0x3421) & 0xFFFF);if (EAX % 0xB == 0 && EAX / 0xB == dwRet){k[1] = k1;k[2] = k2;k[5] = k5;k[7] = k7;break;}}printf("Name:www.15pb.com\n");printf("Password:%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X\n",k[0], k[1], k[2], k[3], k[4], k[5], k[6], k[7], k[8], k[9]);system("pause");return 0;
}

010Editor相关相关推荐

  1. Windows下ASLR机制(地址随机化)- 概念、PE操作、VS相关选项

    1 ASLR机制 Address Space Layout Randomization=地址空间布局随机化:     是一种针对缓冲区溢出的安全保护技术:     没有ASLR时,每次进程执行,加载到 ...

  2. Redis 笔记(02)— keys 键相关命令(查询数据库key数量、判断key是否存在、指定key过期时间、查看key类型、查看key剩余秒数、选择数据库、删除key、删除数据库)

    1. keys 键相关命令 命令 说明 dbsize 返回当前数据路的key数量 exists key 测试指定key是否存在 expire key seconds 为key指定过期时间 type k ...

  3. 国民技术芯片相关产业研发

    国民技术芯片相关产业研发 国民技术股份有限公司--塑造网络社会信息安全DNA,以原始创新技术满足人们安全便捷的网络生活需求.2000年公司成立,是承担国家"909"超大规模集成电路 ...

  4. C++ OP相关注意事项

    C++ OP相关注意事项 Paddle中Op的构建逻辑 1.Paddle中Op的构建逻辑 Paddle中所有的Op都继承自OperatorBase,且所有的Op都是无状态的,每个Op包含的成员变量只有 ...

  5. 2021年大数据HBase(十四):HBase的原理及其相关的工作机制

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase的原理及其相关的工作机制 一.HBase的flus ...

  6. 2021年大数据HBase(五):HBase的相关操作JavaAPI方式

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-JavaAPI方式 一.需求说明 ...

  7. 2021年大数据HBase(四):HBase的相关操作-客户端命令式!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-客户端命令式 1.进入HBase ...

  8. 2021年大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作

      目录 RDD.DF.DS相关操作 SparkSQL初体验 SparkSession 应用入口 获取DataFrame/DataSet 使用样例类 指定类型+列名 自定义Schema ​​​​​​​ ...

  9. 【网站汇总】论文相关

    目录 一.文献检索 1.Connected Papers 2.Slager 3.papers with code 4.arXiv 二.文献管理 1.Mendeley 一.文献检索 1.Connecte ...

  10. 论防止爆T的重要性:N相关孪生素数

    N相关孪生素数 Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lld Description 如果A和B都是素数,而且A和B相 ...

最新文章

  1. Mako 模板系统文档翻译(1) 使用基础
  2. 銷售訂單 (Sales Order): 資料表及更新記錄
  3. Opencv、OpenCV2.x、Opencv3.x个版本的进化,与VS各个版本的匹配问题
  4. shiro添加注解@RequiresPermissions无效
  5. python使用指南(part1)--去重
  6. 如何利用DTS数据同步功能,快速创建数据同步作业
  7. Win32 SDK消息处理技巧
  8. 使用Eclispe 查看api技巧
  9. iOS 处理图片的一些小 Tip
  10. 基于FPGA的多人表决器(VHDL)
  11. 内点法解不等式约束的优化问题
  12. ADO访问Excel 2007
  13. Java三目运算符 (Ternary Operator ? :)
  14. 苹果Mac mini装win 7系统
  15. SMTP错误码/建议解决方法
  16. 10-250 B1-2查询供应商及其供应的产品情况
  17. 河南高校计算机好的是排名,河南高校的计算机科学与技术专业排名如何?
  18. 【vue 基础】 vue常用指令 实例总结
  19. 快播王欣:我所失去的一切,都要靠区块链双倍奉还!
  20. 七夕情人节~html+css+javascript实现满屏爱心特效(程序员表白)

热门文章

  1. 云运维管家服务器,云平台随身管理-我的“运维管家”
  2. 08CMS之数据库字段在表单中的展现
  3. 正点原子Linux开发板实现WiFi开机自动连接
  4. 多维数据运算(矩阵乘法)
  5. 标准正态分布表_机器学习
  6. IR2103H桥驱动电路
  7. 隐马尔可夫模型python实现
  8. Java类加载机制的几个个阶段,加载、验证、准备、解析、初始化【jvm】
  9. 值得收藏!教你如何在火星直播中使用分享码
  10. Coablt strike官方教程中文译版本