简要说明

010Editor----一款专业且强大的文本编辑和十六进制编辑工具。
本着加强逆向学习的心理。对该软件进行一次逆向分析(仅以学习为目的)

所使用工具

ExeInfo、OD、IDA、VS

目标

找出关键算法并写出对应的注册机、去掉网络验证

查看软件基本信息

使用ExeInfo收集软件基本信息
使用QT5开发、无壳

基本的信息获取完毕,后面需要的话再次查看。

软件基本流程

用户名和密码随意填,点击Check弹窗提示错误

这个弹窗很关键,将信息记录文本中。

进入OD定位关键函数

1、依靠弹窗信息,直接搜索字符串


2、定位到错误信息。回溯往上找到函数头下断点


时刻留意每一个CALL的返回值

将任何一个可疑点注释标记起来。以防止丢失关键点,找寻函数过程这里不做过多说明。下面直接进入关键函数开始分析算法。

找到下面的一个Switch case结构。就是我们需要的算法。
具体算法分析如下,没有过多的注释



以下用户名与密钥之间有点关联的一块地方

到此,算法基本完毕。接下来代码实现

借助IDA将函数复制出来到VS中

IDA中找到该函数地址,整段复制下来。注意,该函数还有一段数组


复制该数组地址,回到OD中将这些数值拿出来

注册机代码实现



代码如下

#include<stdio.h>
#include<time.h>
#include <Windows.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* pUserName, 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 = pUserName;v16 = 0;v5 = strlen(pUserName);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 = pUserName;} while (v6 < v5);}return result;
}int main()
{srand(time(NULL));BYTE PASS[10] = { 0x11,0x22,0x33,0x9C,0x55,0x66,0x77,0x88,0x99,0xaa };DWORD eax;DWORD esi;DWORD ecx;DWORD dwRet = 0x3E8;//用户名密码加密。EnCodeUserName//参数1: 用户名 //参数2: 是否9C //参数3: 0 //参数4: 0x3E8char name[20] = {};//接收输入字符缓冲区printf("输入用户名:\n");scanf_s("%s", & name, 20);DWORD dwKey = EnCodeUserName(name, 1, 0, dwRet);PASS[4] = dwKey & 0xFF;PASS[5] = dwKey >> 0x8 & 0xFF;PASS[6] = dwKey >> 0x10 & 0xFF;PASS[7] = dwKey >> 0x18 & 0xFF;while (true){PASS[0] = rand() & 0xFF;eax = ((PASS[0] ^ PASS[6] ^ 0x18 + 0x3D) ^ 0xA7);if (eax >= 9){break;}}while (true){PASS[1] = rand() % 0xFF;PASS[2] = rand() % 0xFF;esi = (0x100 * (PASS[1] ^ PASS[7] & 0xFF) + PASS[2] ^ PASS[5] & 0xFF) & 0xFFFF;eax = (((esi ^ 0x7892) + 0x4D30) ^ 0x3421) & 0xFFFF;if ((eax % 0XB == 0) && (eax / 0XB == dwRet)){break;}}printf("%02X%2X-%02X%2X-%02X%2X-%02X%2X\n", PASS[0], PASS[1], PASS[2], PASS[3], PASS[4], PASS[5], PASS[6], PASS[7]);system("pause");
}

运行注册机进行验证


正常进入,无异常

去除网络验证

注册机实现后,会发现点击检查时还是会卡一会。然后弹出一个验证失败窗口

下面继续分析直接去除联网验证



到这里的时候,我们就不需要去观察这个验证函数了。直接强制修改


点击运行

至此,打上补丁保存文件。完成!

总结

该软件无壳,还是比较好搞定的。
分析过程中需要足够的耐心
逆向中思路还是很重要

010Editor逆向及注册机实现相关推荐

  1. 010 Editor算法逆向与编写注册机

    010editor是一款非常好用的十六进制编辑工具,但是因为他是收费软件,我们接下来对此软件进行一下破解与编写注册机 将程序拖入OD,通过字符串搜索定位到核心代码,经过分析,主要是如下图所示的两个关键 ...

  2. 大神论坛 逆向分析 Internet Download Manager 序列号算法 附IDM注册机完整源码

    1. 前言 idm version : 6.38 Build 23 2.算法逆向 IDM的序列号验证函数定位在: 下面是在IDA下的代码分析: .text:00510010 push ebp .tex ...

  3. 视频+图文+注册+机源码 | 160个CrackMe深度解析合集 | 逆向破解入门

    全部合集的获取请关注微信公众号:逆向驿站 回复:160 即可获得其余合集 以下是示例文章 160个CrackMe深度解析合集-001 提倡"刨根问底",拒绝"浅尝辄止&q ...

  4. 010Edit分析 爆破 + 算法逆向 + 注册机编写

    爆破 假码 pName = xuanci pKey = 00112233445566778899 登录出错 复制错误信息 --------------------------- 010 Editor ...

  5. 010 Editor算法逆向分析之编写注册机

    将程序拖入OD,通过字符串搜索定位到核心代码,经过分析,主要是如下图所示的两个关键函数,返回正确的值,才算是注册成功. 1 开始分析,我们点击register按钮,弹出来窗口让我们输入用户名和密码 1 ...

  6. [转载]注册机破解法的原理以及应对方法

    [---  资料是从免费网站上获取的,上载在这里,只为交流学习目的,文章原作者保留所有权力, 如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除.同时本人深表歉意,并致以崇高的谢意! ...

  7. 010 Editor v8.0.1_x32分析以及注册机制作

    环境以及工具 Window7_x32 010 Editor v8.0.1_x32 OD VS2017 第一步 找到判断注册结果的关键跳转和关键函数 使用OD打开010editor,进入到注册界面,先尝 ...

  8. Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)

    知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...

  9. Android|Qt笔记-某App注册机思路总结

    现在是2021-08-01 23:20:44,目前这篇博文还在笔记里面,估计发布到网上已经是1个月后了. 目前写了一个App的注册机: 这里是单线程的,差不多30-50s可以注册一个帐号. 这个程序不 ...

  10. k3v12.0精益版注册机_精益均值VBA机

    k3v12.0精益版注册机 This is Recruit a New VBA Programmer Week, according to Dick Kusleika, so we'd better ...

最新文章

  1. 吐槽一下微信公众号的赞赏号
  2. linux死锁检测的一种思路【转】
  3. GridView 里的删除不起作用
  4. PAT天梯赛练习题——L3-005. 垃圾箱分布(暴力SPFA)
  5. 扬州大学计算机专业考研分数线,扬州大学2021考研分数线已公布
  6. 坚持做一件事情真的很不容易,首先必须要克服惰性!
  7. java 线程同步condtion_Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信...
  8. java异常处理框架_深入探索 高效的Java异常处理框架(1)
  9. 计算机二级高级应用这么难,计算机二级考试越来越难的实锤!真实数据告诉你到底难在哪里?...
  10. 猫、狗与Java的多态
  11. mfc程序转化为qt_10年程序员:我都学过这些语言,2019年开始我再也不是程序员......
  12. catcti监控linux主机,CentOS7搭建Prometheus 监控Linux主机
  13. ADT下载地址整理(转)
  14. 计算机专业论文答辩ppt,计算机行业毕业论文答辩PPT.pptx
  15. Customer类的设计
  16. 68 个 Python 内置函数详解,初学者一定不要错过,建意收藏学习
  17. 日本恐怖片《二重身》核心内容赏析
  18. 面试:GET 请求能上传图片吗,已解决
  19. java地址簿管理系统
  20. 2020年浙江理工大学新生赛 B Cly的博弈

热门文章

  1. 变更DirectX SDK版本-DirectX8升级DirectX9
  2. php网站系统说明,国外CMS系统介绍(总结)
  3. TFTPD32不能传输数据的解决与尝试
  4. VBA版本获取ClientKey
  5. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、自定义修改描述性统计参数输出自定义统计量
  6. 杨森翔的书法:二月二;四条屏
  7. 微信小程序开发之组件view,scroll-view,swiper,text,rich-text,button,image,navigator
  8. EXCEL 统计每日订单量(拉勾教育数据分析实战训练营学习笔记)
  9. 如何备份光猫html文件夹,华为光猫备份jffs2及HG8321R-RMS切换HG8321版本教程
  10. 计算机配置显示器,电脑怎么配置多台显示器