注册机偷懒写法1、之直接扣代码

注册机偷懒写法2、之直接调用源程序的函数

注册机偷懒写法3、内联Hook让程序自己弹出注册码

注册机偷懒写法4、调试模式下获取

如果程序的算法太复杂,我们搞不定,或者分析时间太长, 我们可以尝试将程序加载到注册机程序的内存空间直接通过地址直接调用管算法call, 前提call中没有一些需要提前初始的变量,把需要加载的exe的重定位去掉这样就不需要修复需要加载的exe的重定位了。

#include<Windows.h>
#include<iostream>
/*如果程序的算法太复杂,我们搞不定,或者分析时间太长,我们可以尝试将程序加载到注册机程序的内存空间直接通过地址直接调用管算法call,前提call中没有一些需要提前初始的变量把需要加载的exe的重定位去掉这样就不需要修复需要加载的exe的重定位了
*/// 释放文件内容
void freeFileData(_In_  char* pFileData) {delete[] pFileData;
}//获取DOS头
IMAGE_DOS_HEADER* getDosHeader(_In_  char* pFileData) {return (IMAGE_DOS_HEADER*)pFileData;
}// 获取NT头
IMAGE_NT_HEADERS* getNtHeader(_In_  char* pFileData) {return (IMAGE_NT_HEADERS*)(getDosHeader(pFileData)->e_lfanew + (SIZE_T)pFileData);
}//获取文件头
IMAGE_FILE_HEADER* getFileHeader(_In_  char* pFileData) {return &getNtHeader(pFileData)->FileHeader;
}//获取扩展头
IMAGE_OPTIONAL_HEADER* getOptionHeader(_In_  char* pFileData) {return &getNtHeader(pFileData)->OptionalHeader;
}
//获取需要调用的函数或数据新地址,源程序的加载基址与需要调用的函数或数据相对虚拟地址
int GetNewAddress(HMODULE hsrc, int sRva)
{return (int)hsrc + sRva;
}
//修复IAT
void fiat(char * hsrc)
{IMAGE_THUNK_DATA* pIat = 0, *pInt = 0;IMAGE_IMPORT_DESCRIPTOR* pImp = (IMAGE_IMPORT_DESCRIPTOR*)(getOptionHeader(hsrc)->DataDirectory[1].VirtualAddress + hsrc);while (pImp->FirstThunk != 0){char* dllName = pImp->Name + hsrc;HMODULE hDll = LoadLibraryA(dllName);// 3. 根据导入表记录的dll名, 加载这个DLL// 4. 遍历导入名称表, 得到从这个dll中导入的所有的函数名/序号// 5. 使用GetProcAddress获取这个函数的地址// 6. 将地址填写到IAT中.pIat = (IMAGE_THUNK_DATA*)(pImp->FirstThunk + hsrc);if (pImp->OriginalFirstThunk == NULL)pInt = (IMAGE_THUNK_DATA*)(pImp->FirstThunk + hsrc);elsepInt = (IMAGE_THUNK_DATA*)(pImp->OriginalFirstThunk + hsrc);while (pInt->u1.Function != 0){DWORD address = 0;if (IMAGE_SNAP_BY_ORDINAL(pInt->u1.Ordinal)){// 序号导入address = (DWORD)GetProcAddress(hDll,(char*)IMAGE_ORDINAL(pInt->u1.Ordinal));}else {IMAGE_IMPORT_BY_NAME* pName = (IMAGE_IMPORT_BY_NAME*)(pInt->u1.Function + hsrc);address = (DWORD)GetProcAddress(hDll, pName->Name);}// 将得到的地址填写到IAT中.DWORD old;VirtualProtect(&pIat->u1.Function, 4, PAGE_READWRITE, &old);pIat->u1.Function = address;VirtualProtect(&pIat->u1.Function, 4, old, &old);++pInt;++pIat;}++pImp;}
}
int main()
{char name[20] = { 0 };scanf_s("%s", name, sizeof(name));int len = strlen(name);if (len < 6){printf("Der Name muss min. 6 Zeichen lang sein\n");}else{HMODULE hsrc = LoadLibraryA("Dope2112.1.exe");fiat((char *)hsrc);char str1[20] = { 0 };char str2[20] = { 0 };char str3[40] = { 0 };int fun_0x405374 = GetNewAddress(hsrc, 0x5374);int fun_0x403424 = GetNewAddress(hsrc, 0x3424);int data_0x421dd8 = GetNewAddress(hsrc, 0x21dd8);__asm{xor eax, eaxdope2112_1_421bf4 :xor edx, edxmov dl, allea ecx, [name]movzx edx, byte ptr ds : [ecx + edx - 1]add edx, 0xffffff9fcmp edx, 0x19ja dope2112_1_421ce3jmp dword ptr ds : [edx * 4 + 421c13h]//莫名数据开始jnp dope2112_1_421c31inc edxadd byte ptr ds : [edi + 0x1c], bhinc edxadd byte ptr ds : [ebx - 0x78ffbde4], alsbb al, 0x42add byte ptr ds : [ebx - 0x70ffbde4], cldope2112_1_421c31 :sbb al, 0x42add byte ptr ds : [ebx - 0x68ffbde4], dlsbb al, 0x42add byte ptr ds : [ebx - 0x60ffbde4], blsbb al, 0x42add byte ptr ds : [ebx - 0x58ffbde4], ahsbb al, 0x42add byte ptr ds : [ebx - 0x50ffbde4], chsbb al, 0x42add byte ptr ds : [ebx - 0x48ffbde4], dhsbb al, 0x42add byte ptr ds : [ebx - 40ffbde4h], bhsbb al, 0x42add bl, alsbb al, 0x42add bh, alsbb al, 0x42add bl, clsbb al, 0x42add bh, clsbb al, 0x42add bl, dlsbb al, 0x42add bh, dlsbb al, 0x42add bl, blsbb al, 0x42add bh, blsbb al, 0x42add byte ptr ds : [edx - 0x4d9914e8], dhand eax, 0x42b262eb//莫名数据结束jmp dope2112_1_421ce5mov dl, 0xcjmp dope2112_1_421ce5mov dl, 0xdjmp dope2112_1_421ce5mov dl, 0x6jmp dope2112_1_421ce5mov dl, 0x36jmp dope2112_1_421ce5mov dl, 0x2bjmp dope2112_1_421ce5mov dl, 0x17jmp dope2112_1_421ce5mov dl, 0x2fjmp dope2112_1_421ce5mov dl, 0x13jmp dope2112_1_421ce5mov dl, 0x82jmp dope2112_1_421ce5mov dl, 0x9bjmp dope2112_1_421ce5mov dl, 0x92jmp dope2112_1_421ce5mov dl, 0x3jmp dope2112_1_421ce5mov dl, 0x63jmp dope2112_1_421ce5mov dl, 0x21jmp dope2112_1_421ce5mov dl, 0x42jmp dope2112_1_421ce5mov dl, 0x5cjmp dope2112_1_421ce5mov dl, 0x29jmp dope2112_1_421ce5mov dl, 0xc7jmp dope2112_1_421ce5mov dl, 0x66jmp dope2112_1_421ce5mov dl, 0x58jmp dope2112_1_421ce5mov dl, 0xajmp dope2112_1_421ce5mov dl, 0x28jmp dope2112_1_421ce5mov dl, 0x50jmp dope2112_1_421ce5dope2112_1_421ce3 :mov dl, 5dhdope2112_1_421ce5 :add bl, dlinc eaxcmp al, 0x6jne dope2112_1_421bf4lea edx, [str1]xor eax, eaxmov al, byte ptr ss : [len]imul eax, eax, 0x4A7Ecall fun_0x405374 //调用原函数 call 0x405374lea edx, [str2]xor eax, eaxmov al, blcall fun_0x405374 //调用原函数 call 0x405374push dword ptr ss : [str1]push data_0x421dd8push dword ptr ss : [str2]lea eax, dword ptr ss : [str3]mov edx, 3call fun_0x403424 //调用原函数 call 0x403424}printf("%s", str3);CloseHandle(hsrc);}return 0;
}

源码

https://download.csdn.net/download/u012332009/11122063

这个实验我没有做成功,分析了下调用的方法中似乎有未初始化的全局变量。

源程序的分析请看

[反汇编练习] 160个CrackMe之044
(出处: 吾爱破解论坛)

注册机偷懒写法2、之直接调用源程序的函数相关推荐

  1. TraceMe.exe注册码破解及注册机编写

    一.追注册码步骤解析 打开OllyDbg反汇编软件,对实验程序TraceMe.exe进行反汇编. 点击View-Executable modules查看可执行模块,在新窗口中右击,选择Show nam ...

  2. Borland C++ Builder6.0中文破解安装详细图文教程(附注册机)

    Borland C++ Builder6.0中文破解安装详细图文教程(附注册机) 互联网   03-20 09:10:25   作者:佚名    我要评论 C++Builder 6.0是一款由Borl ...

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

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

  4. VC++生成序列号和注册机总结

    VC++生成序列号和简单注册机实例 在成品软件中,软件注册是必需的,在VC++中,如何实现程序注册功能呢?今天发一下VC++生成程序序 列号和注册机程序的代码,或许是个参考 一.生成程序序列号的具体实 ...

  5. 单机版简易考试系统开发过程讲解(C#注册机、用户注册、考试系统、×××全部源码)...

    前些日子有个朋友,找我做一个考试软件,浙江省驾驶员理论包考专用系统,总共也没几个页面需要做,但是他以前的数据库VFP的数据,题库里有几千条数据,若人工录入几乎比太可行,他把原来的软件,给我装好,还需要 ...

  6. Autocad2017破解版下载|Autodesk Autocad 2017中文破解版下载 64位(附注册机/序列号)

    Autocad2017是Autodesk公司开发的自动计算机辅助设计软件,可用于二维绘图.详细绘制.设计文档和基本三维设计,它具有良好的用户界面,允许用户通过交互菜单或命令行方式来进行各种操作,包括图 ...

  7. AI System 人工智能系统 TVM深度学习编译器 DSL IR优化 计算图 编译 优化 内存内核调度优化 DAG 图优化 DFS TaiChi 函数注册机 Registry

    DSL 领域专用语言 TVM深度学习编译器 AI System 人工智能系统 参考项目 TaiChi 三维动画渲染物理仿真引擎DSL TVM 深度学习DSL 密集计算DSL LLVM 模块化编译器 编 ...

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

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

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

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

最新文章

  1. 六种方法实现CSS三栏布局
  2. 《程序员面试宝典》-数据结构编程练习1
  3. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message
  4. Activity(活动)之Intent(意图)(显式与隐式)的使用
  5. Java实现ftp的上传、下载和删除
  6. 四、数据仓库和Hive环境搭建
  7. 利用瑞利里兹方法计算固有频率的程序_不可不知的电机磁致伸缩计算方法
  8. 边缘检测后去除噪点_修图前vs修图后,原来那些网红“照骗”都是这样修出来的!...
  9. Silverlight4 ColorPicker控件
  10. python求50的阶乘_python如何求阶乘
  11. mac搭建apace和php开发环境
  12. [转载]Linux驱动-SPI驱动 之二:SPI通用接口层
  13. 51Nod-2149 字符串出现位置【水题】
  14. SQL 语句语法简介(一)
  15. 数据结构之顺序表(C语言版)
  16. linux多线程 进程休眠,转载:Linux多线程之线程休眠
  17. htlm5实习报告_web前端实习报告.doc
  18. 亲测好用的万能工具箱:Parallels Toolbox for mac中文版
  19. 字体,字号与尺寸对应表
  20. 2019 live tex 发行版_下载和安装Texlive2019

热门文章

  1. 使用VS2019+Intel OneAPI (ifort)+Intel MPI编译和运行MPI程序与Coarray程序
  2. 使用 Contest 分析测试用例的代码覆盖率
  3. python套用word模板_Python3操作Office之Word模板技术
  4. 真人表述:一个技术支持人员的兼职创业实战案例
  5. 米思齐触控+RGB灯实现红绿蓝灯循环切换
  6. app的启动页面(二)----四种APP启动页设计方案
  7. python创建表格怎么只能65536_python写入excel超过65536行报错问题解决方法
  8. 计算机维修要学几年,做电脑维修需要学习哪些知识呢?
  9. MySQL学习一条龙
  10. angular指令心得(ng-model)