TraceMe.exe注册码破解及注册机编写
一.追注册码步骤解析
- 打开OllyDbg反汇编软件,对实验程序TraceMe.exe进行反汇编。
- 点击View-Executable modules查看可执行模块,在新窗口中右击,选择Show names in all modules查看名称信息。
- 输入Ctrl+F,搜索关键字:DispatchMessageW,该部分对应WM_LBUTTONDOWN消息断点,在该行右键选择Conditional breakpoint条件断点,输入条件为: [[esp+4]+4] == 0x201,这是因为Windows的msg参数WM_LBUTTONDOWN = 0x201。
- 点击调试运行(F9),此时TraceMe 动态分析技术注册对话框打开,点击用户名输入文本框,此时断点使程序暂停,再点击F9,在用户名输入框中输入姓名testname以及任意错误的序列号xuliehao,最后点击Check按钮完毕。
- 点击按钮M(Open Memory map window(Alt+M)),打开内存窗口,在代码段入口处地址0x00401000处右键,Set break-on-access(F2)下断点,F9运行,程序停在地址0x004010D0处。
- 打开另一静态反编译软件IDAPro6.6,利用其打开TraceMe.exe,点击空格键切换到图形视图,点击G跳转到指定地址,输入代码段入口地址:4010d0,查看其对应指令为sub esp, 0F4h,与OllyDbg中的反编译结果一致。
回到OllyDbg中,在地址0x004010D0处右键,Breakpoint - Toggle,下单步断点进行调试。观察右下角参数值信息如下:
F9单步执行,直至参数信息变为如下:
wParam的值变为MENU/BN_CLICKED,表示按钮已经被点击。转至IDAPro6.6对执行代码块进行访问追踪,点击Set note coler对代码块涂色,跟踪红线False分支到达如下代码块:
点击空格切换代码视图,观察到该代码块的地址为0x0040119C,将其复制下来。- 在OllyDbg中右键Go to - Expression(Ctrl+G),转到地址0x0040119C,下断点,运行F9。
- 在IDAPro6.6中,观察刚才的代码块,有一句函数调用:call edi ; GetDlgItemTextA。还有一条语句push eax ;lpString,往上查看,有一句lea eax, [esp+100h+String]和push eax,可断定此即为输入的用户名的字符串;有一条语句push ecx ;lpSring,往上查看,有一句lea ecx, [esp+100h+String1]和push ecs,可断定此即为输入的序列号。
- 在OllyDbg中,运行Step over(F8),直至运行到语句LEA ECX, [LOCAL.24]处。右键点击语句LEA EAX, [LOCAL.44],Follow in Dump - Memory address,跟踪EAX存储器的地址内容,在ASCII信息中可观察到之前输入的用户名testname。继续F8执行至CALL EDI语句,然后右键LEA ECX, [LOCAL.24]语句,Follow in Dump - Memory address,跟踪ECX存储器的地址内容,在ASCII信息中可观察到之前输入的序列号内容xuliehao。
- 返回IDAPro6.6中,继续在刚才的代码块中往下跟踪红线False分支。来到关键函数调用处 call sub_401340。双击该语句,转移到新的图形视图,查看其函数调用,其中包含call ds: wsprintfA 和 call ds: lstrcmpA,点击后者,查看其内存地址为0x0040138F,复制。
- 返回到OllyDbg,跳转到地址0X0040138F,F2下断点,F9运行,此时查看参数信息,如下:
表示用户名testname对应的正确序列号为9952。 - 退出OllyDbg,运行程序TraceMe.exe,输入用户名testname,序列号9952,显示结果正确.
二.注册机编写
- 在IDAPro6.6中,追踪DialogFunc函数,找到关键注册码计算模块函数调用部分如下:
关键调用语句为 call sub_401340,双击代码跟踪,并空格切换代码视图,得到程序的注册码计算部分如下(OD截图):
- 尝试对该汇编代码部分进行注释:
00401340 /$ 55 push ebp
00401341 |. 8B6C24 0C mov ebp,dword ptr ss:[esp+0xC] ;ebp = 用户名
00401345 |. 56 push esi ; TraceMe.0040504F
00401346 |. 57 push edi
00401347 |. 8B7C24 18 mov edi,dword ptr ss:[esp+0x18] ;edi = 用户名的长度
0040134B |. B9 03000000 mov ecx,0x3 ;ecx = 从用户名的第四个字符开始计算
00401350 |. 33F6 xor esi,esi ;esi = 0 = 计算出的注册码 ; TraceMe.0040504F
00401352 |. 33C0 xor eax,eax ;eax = 0,用于计数,读取数据表的第eax个字节
00401354 |. 3BF9 cmp edi,ecx ;if(edi > ecx)
00401356 |. 7E 21 jle short ;{ TraceMe.00401379
00401358 |. 53 push ebx
00401359 |> 83F8 07 /cmp eax,0x7 ; if(eax > 7)
0040135C |. 7E 02 |jle short TraceMe.00401360
0040135E |. 33C0 |xor eax,eax ;{eax = 0;}
00401360 |> 33D2 |xor edx,edx ;edx = 0;
00401362 |. 33DB |xor ebx,ebx ;ebx = 0
00401364 |. 8A1429 |mov dl,byte ptr ds:[ecx+ebp] ; dl = ebp + ecx = 从用户名的第四个字符开始计算
00401367 |. 8A98 30504000 |mov bl,byte ptr ds:[eax+0x405030] ;bl = 数据表第eax个字符,数据表的内存地址为0x00405030处,查找其数值为0C 0A 13 09 0C 0B 0A 08(根据判断语句0x00401359可知,只有8个数据)
0040136D |. 0FAFD3 |imul edx,ebx ;edx = edx * ebx
00401370 |. 03F2 |add esi,edx ;esi = esi + edx
00401372 |. 41 |inc ecx ;ecx++
00401373 |. 40 |inc eax ;eax++;
00401374 |. 3BCF |cmp ecx,edi ;if(ecx<edi) 如果未取完用户名字符则继续
00401376 |.^ 7C E1 \jl short ;{goto 0x00401359} TraceMe.00401359
00401378 |. 5B pop ebx ;计算结束 ; 0012FAE8
00401379 |> 56 push esi ; /<%ld> = 40504F (4214863.)
0040137A |. 68 78504000 push TraceMe.00405078 ; |%ld
0040137F |. 55 push ebp ; |s = 0012FAAC
00401380 |. FF15 9C404000 call dword ptr ds:[<&USER32.wsprintfA>] ; \wsprintfA
00401386 |. 8B4424 1C mov eax,dword ptr ss:[esp+0x1C]
0040138A |. 83C4 0C add esp,0xC
0040138D |. 55 push ebp ; /String2 = "?"
0040138E |. 50 push eax ; |String1 = 000003F5 ???
0040138F |. FF15 04404000 call dword ptr ds:[<&KERNEL32.lstrcmpA>] ; \lstrcmpA
00401395 |. F7D8 neg eax
00401397 |. 1BC0 sbb eax,eax
00401399 |. 5F pop edi ; 0012FAE8
0040139A |. 5E pop esi ; 0012FAE8
0040139B |. 40 inc eax
0040139C |. 5D pop ebp ; 0012FAE8
0040139D \. C3 retn
- 利用VS的内嵌汇编编写注册机,代码如下:
#include <iostream>
#include <string>using namespace std;char strTable[8] = { 0x0C, 0x0A, 0x13, 0x09, 0x0C, 0x0B, 0x0A, 0x08 };
char usrName[20] = ""; // = ebp = 用户名
int len; // = edi = 用户名的长度
int code = 0; // = esi = 保存计算出的注册号int main(int argc, char* argv[])
{cout << "***************************欢迎进入注册机****************************" << endl;cout << "请输入用户名(大于4个字符) : ";cin >> usrName;len = strlen(usrName);while (len<5){cout << "用户名必须大于4个字符 !" << endl<< "请重新输入用户名 : ";cin >> usrName;len = strlen(usrName);cout << endl;}__asm{push ebpmov ebp, offset usrName // ebp = 用户名,须将原dword ptr [esp+C]改写push esipush edimov edi, len // edi = 用户名的长度mov ecx, 3 // ecx = 从用户名的第四个字符开始计算xor esi, esi // esi = 计算出的注册号xor eax, eax // eax 用于计数,读取数据表中的第eax个字节cmp edi, ecx // if (edi > ecx)jle _00401379 // { // 原short 00401379改为相应的标号push ebx_00401359 : cmp eax, 7 // if (eax > 7)jle _00401360xor eax, eax // { eax = 0; }_00401360 : xor edx, edx // edx = 0;xor ebx, ebx // ebx = 0;mov dl, byte ptr[ecx + ebp] // dl = ebp + ecx mov bl, byte ptr[eax + strTable] // bl = 数据表第eax个字符imul edx, ebx // edx = edx * ebx;add esi, edx // esi = esi + edx = 计算出的注册号inc ecx // ecx++;inc eax // eax++;cmp ecx, edi // if( ecx < edi) // 如果未取完用户名的字符则继续jl _00401359 // { goto 00401359; }mov code, esi // 保存注册号到 iCodepop ebx // } _00401379 : pop edipop esipop ebp}cout << "序列号为 : " << code << endl;return 0;
}
- 注册机运行结果如下:
TraceMe.exe注册码破解及注册机编写相关推荐
- SRS_Audio_Sandbox注册码破解版+注册机+中文
刚装了win7,发现音乐有杂音,上网搜了很多资料,无非是一些让你重装声卡驱动之类的,我就试了试,发现怎么新装都不管事,晕了...后来有篇帖子建议装上SRS,说是可以加强音效,我就抱着侥幸的心里装了,结 ...
- 庖丁解牛破解与注册机编写
注册原理: 1. 机器码生成原理: 根据函数得到dwSerial,然后与一个常数0x51627384异或,结果的十六进制表示就是机器码. LPTSTR pVolumeNameBuffer = new ...
- 小白第一次注册机编写,c/bat/易某言(不好意思说2333)
小白第一次注册机编写,c/bat/易某言(不好意思说出口2333) 零.视频教程 一.免责声明 二.软件相关信息 三.查壳 四.分析软件注册流程 五.IDA载入 六.OD载入 (一).找关键跳转 1. ...
- Syncnavigator破解版注册机
下载网站:www.SyncNavigator.CN 客服QQ1793040 ---------------------------------------------------------- 关 ...
- MyEclipse Enterprise Workbench 9.0 破解及注册机 注册码
MyEclipse 9.0的激活机制终于破解了,破解步骤比老版本要复杂一些,但是是绝对可以破解的,这个破解对主程序无任何修改,只替换公钥,如果有牛人会快速从公钥反推私钥,那就什么都不用改了,步骤如下: ...
- 用ollddbg 寻找注册码,keymake写注册机教程
点击浏览该文件 用ollddbg 寻找注册码的教程 作者:夜袭来 QQ:20517896 email:loop_jspone@yahoo.com.cn 练习程序 ke_Crackme2.exe (由风 ...
- UltraEdit v18.0 破解版注册机
转自:http://001.net76.net/ultraedit-v18-0.html ultraEdit是强大的文本编辑器,可以编辑文本,16进制,ASCII 码,比系统自带的记事本强大,而且好用 ...
- EmEditor注册码及EmEditor注册机下载
EmEditor(官方网站:http://www.emeditor.com/)是一款日本出品的简单好用的文本编辑器,有官方中文版,对中文支持良好.EmEditor支持多种配置,自定义颜色.字体.工具栏 ...
- 菜鸟 学注册机编写之 “查表”
测试环境 系统: xp sp3 调试器 :od 1.10 高手不要见笑,仅供小菜玩乐,有不对或不足的地方还请多多指教,不胜感激! 1.首先运行程序随便输入用户与注册码如下图所示: 2.载入OD通过下M ...
最新文章
- 计组--习题--总线
- Easy Problem 7 求反数字字符串
- 网络编程学习笔记(getsockopt和setsockopt函数)
- TF之TFOD-API:基于tensorflow框架利用TFOD-API脚本文件将YoloV3训练好的.ckpt模型文件转换为推理时采用的.pb文件
- cmw500综合测试仪使用_综合布线中手持式测试仪
- [Android Pro] Android 6.0 Root
- 解决VS2017运行时控制台一闪即逝问题的方法
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
- 什么代码才是线程安全的
- 关于HTML使用ComDlg ActiveX 无法弹出相应对话框的问题1
- 发明导诊机器人团队_牛!这个平均年龄21岁的团队竟然发明偏瘫康复机器人
- 李彦宏说吃着火锅唱着歌,奔驰你却要我命!
- HDU 1074 Doing Homework【状态压缩DP】
- asp.net 无法访问已关闭的资源集
- CodeMatic动软自动生成Nhibernate
- doesn‘t work properly without JavaScript enabled. Please enable it to continue 的原因之一
- 计算机量子化学计算实验报告物化实验,量子化学计算方试验.doc
- 计算机的基本知识理论,计算机基本理论基础知识总汇
- python自动进直播_Python实现自动录制虎牙直播
- 服务器没有显示器能接笔记本吗,笔记本能连显示器吗_笔记本能不能接显示器...