破解Demo
需要破解的程序界面如下:

需要破解的程序的主要代码如下:
void CEasyCrackMeDlg::OnBnClickedButtonOk()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR szID[MAXBYTE] = {};
TCHAR szPassword[MAXBYTE] = {};
TCHAR szTempPassword[MAXBYTE] = {}; GetDlgItemText(IDC_EDIT_ID, szID, MAXBYTE);
GetDlgItemText(IDC_EDIT_PASSWORD, szPassword, MAXBYTE); if (lstrlen(szID) == )
{
return;
} if (lstrlen(szPassword) == )
{
return;
} if (lstrlen(szID) < )
{
return;
} for (int i = ; i < lstrlen(szID); i++)
{
if (szID[i] == _T('Z') || szID[i] == _T('z') || szID[i] == _T(''))
{
szTempPassword[i] = szID[i];
}
else
{
szTempPassword[i] = szID[i] + ;
}
} if (lstrcmp(szTempPassword, szPassword) == )
{
AfxMessageBox(_T("密码正确"));
}
else
{
AfxMessageBox(_T("密码错误"));
}
} void CEasyCrackMeDlg::OnBnClickedButtonCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}
需要破解的程序的下载地址:
http://pan.baidu.com/s/1jG2ZV06
一、文件补丁
用OD打开上面的程序,下断点:bp lstrcmpW,运行到断点处后跳出该程序,会看到判断的地方JNZ(代码为75h),把它修改为JZ(代码为74h)即可,该行对应的地址为内存中的虚拟地址VA,转换成FileOffset后修改75h为74h即可。
文件补丁的具体代码如下:
#include <Windows.h>
#include <iostream> using namespace std; int main(int argc, char **argv)
{
DWORD dwFileOffset = ; #ifdef _DEBUG
dwFileOffset = 0x00001FED;
#else
dwFileOffset = 0x00000828;
#endif BYTE bCode = ;
DWORD dwReadNum = ; if (argc != )
{
cout << "Please input two argument!" << endl;
return -;
} DWORD dwErr = ; //打开文件
HANDLE hFile = CreateFile(argv[], GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
dwErr = GetLastError();
cout << __LINE__ << " : CreateFile error ( " << dwErr << " )" <<endl;
return -;
} if (INVALID_SET_FILE_POINTER == SetFilePointer(hFile, dwFileOffset, NULL, FILE_BEGIN))
{
dwErr = GetLastError();
cout << __LINE__ << " : SetFilePointer error ( " << dwErr << " )" <<endl;
return -;
} if ( == ReadFile(hFile, (LPVOID)&bCode, sizeof(BYTE), &dwReadNum, NULL))
{
dwErr = GetLastError();
cout << __LINE__ << " : ReadFile error ( " << dwErr << " )" <<endl;
return -;
} //比较当前位置是否为JNZ
if (TEXT('\x75') != bCode)
{
cout << bCode << endl;
CloseHandle(hFile);
return -;
} //修改为JZ
bCode = TEXT('\x74');
if (INVALID_SET_FILE_POINTER == SetFilePointer(hFile, dwFileOffset, , FILE_BEGIN))
{
dwErr = GetLastError();
cout << __LINE__ << " : SetFilePointer error ( " << dwErr << " )" <<endl;
CloseHandle(hFile);
return -;
} if ( == WriteFile(hFile, (LPVOID)&bCode, sizeof(BYTE), &dwReadNum, NULL))
{
dwErr = GetLastError();
cout << __LINE__ << " : WriteFile error ( " << dwErr << " )" <<endl;
CloseHandle(hFile);
return -;
} cout << "Write JZ is Successfully !" << endl; CloseHandle(hFile); //运行修改后的程序
//int iLen = WideCharToMultiByte(CP_ACP, 0, argv[1], -1, NULL, 0, NULL, NULL);
//char *pszFileName = new char[iLen];
//WideCharToMultiByte(CP_ACP, 0, argv[1], -1, pszFileName, iLen, NULL, NULL);
//WinExec(pszFileName, SW_SHOW);
//delete[] pszFileName;
WinExec(argv[], SW_SHOW); return ;
}
这里把上面需要破解的程序拖到文件补丁上打开即可破解。
二、内存补丁
具体方法同上面的文件补丁,只是不需要做VA到FileOffset的转换。
具体代码如下:
#include <Windows.h>
#include <iostream> using namespace std; int main(int argc, char **argv)
{
DWORD dwVAddress = ;
#ifdef _DEBUG
dwVAddress = 0x01262BED;
#else
dwVAddress = 0x01011428;
#endif
BYTE bCode = ;
DWORD dwReadNum = ;
DWORD dwErr = ; if (argc != )
{
cout << "Please input two argument!" <<endl;
return -;
} STARTUPINFO si = {};
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_SHOW;
si.dwFlags = STARTF_USESHOWWINDOW; PROCESS_INFORMATION pi = {}; BOOL bRet = CreateProcess(argv[], NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
if (FALSE == bRet)
{
dwErr = GetLastError();
cout << __LINE__ << " : CreateProcess Error ( " << dwErr << " )" << endl;
return -;
} ReadProcessMemory(pi.hProcess, (LPVOID)dwVAddress, (LPVOID)&bCode, sizeof(BYTE), &dwReadNum); //判断是否为JNZ
if (TEXT('\x75') != bCode)
{
dwErr = GetLastError();
cout << bCode << endl;
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return -;
} //将JNZ修改为JZ
bCode = TEXT('\x74');
WriteProcessMemory(pi.hProcess, (LPVOID)dwVAddress, (LPVOID)&bCode, sizeof(BYTE), &dwReadNum); ResumeThread(pi.hThread); CloseHandle(pi.hThread);
CloseHandle(pi.hProcess); cout << "Write JZ is Successfully !" << endl; return ;
}
破解Demo的更多相关文章
- 学习笔记:暴力破解WIFI小软件
小弟 自己的学习笔记,做练习的 ,缺陷还很多,做到无法解决速度问题就不想做下去了,如果要看的话 主要是思路问题,获取句柄,控制句柄而已,代码比较简单.大神勿喷啊 破解DEMO源码:http://dow ...
- C# 反编译破解软件方法
我们有时在使用一些小工具软件时,会提示购买License(注册码之类的东东)后才能正常使用.在这里我们来尝试直接绕过License验证直接使用软件,实现简单的软件破解. 主要实现方式: 通过反编译工具 ...
- 微信web开发者工具、破解文件、开发文档和开发Demo下载
关注,QQ群,微信应用号社区 511389428 下载: Win: https://pan.baidu.com/s/1bHJGEa Mac: https://pan.baidu.com/s/1slhD ...
- Java 多线程 破解密码 demo
功能要求: 具体类: Decrypt 测试类,用来启动破解和日志线程 DecryptThread 破解线程类,用来生成测试的字符串,并暴力破解 LogThread 日志类,将输出每次生成的字符串结果 ...
- 破解 jeb 2.3.7 demo
前言 使用的技术和上文的一样. mips 版本的修改版 修改版: https://gitee.com/hac425/jeb-mips 正文 安卓版 jeb-2.3.7.201710262129-JEB ...
- 【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您将懂 ...
- Android动态方式破解apk终极篇(加固apk破解方式)
一.前言 今天总算迎来了破解系列的最后一篇文章了,之前的两篇文章分别为: 第一篇:如何使用Eclipse动态调试smali源码 第二篇:如何使用IDA动态调试SO文件 现在要说的就是最后一篇了,如何应 ...
- Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)
一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk 主要采用的是静态方式,步骤也很简单,首先使用 ...
- 移动端的拖拽这个demo实现的功能
SQL数据库适合那些需求确定和对数据完整性要去严格的项目.NoSQL数据库适用于那些对速度和可扩展性比较看重的那些不相关的,不确定和不断发展的需求. 总所周知,网页的加载速度跟图片是有很大的关系的,因 ...
随机推荐
- STM32中断控制及优先级设置
M3用8bits而STM32用高四位来表示抢占和子优先级:bit=1表示抢占:bit=0表示非抢占即子优先级:所以共有5中方案分组: 分组 Bit7 Bit6 Bit5 Bit4 说明: 第0组 ...
- java socket通讯(二)处理多个客户端连接
通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
- 手机端的各种默认样式比如 ios的按钮变灰色
1.ios按钮变灰色,给按钮加样式: -webkit-appearance: none; 2.有圆角话 ; } 3.去除Chrome等浏览器文本框默认发光边框 input:focus, textare ...
- android 资源文件
系统文档:http://developer.android.com/guide/topics/resources/available-resources.html 1. 系统下资源文件夹的名字是固定的 ...
- JavaScript对象的创建之外部属性定义方式(基于已有对象扩充其属性和方法)
var person = new Object(); person.name = "luogk"; person.age = 33; person.say = function() ...
- SQL必知必会笔记2
15. 插入数据 1). 数据插入 INSERT 用来将行插入到数据库表中,插入的方式有几种: (1)插入完整的行: INSERT INTO Customers VALUES( '1000000006 ...
- Orchard官方文档翻译(八) 为站点增加博客
原文地址:http://docs.orchardproject.net/Documentation/Adding-a-blog-to-your-site 想要查看文档目录请用力点击这里 最近想要学习了 ...
- 移动端拖拽(模块化开发,触摸事件,webpack)
通过jquery可以很容易实现CP端的拖拽.但是在移动端却不好用了.于是我自己写了一个在移动端的拖拽demo,主要用到的事件是触摸事件(touchstart,touchmove和touchend). ...
- qt+2012+qtcreator 配置
这个配置搞了我好久,终于搞定了,网上一大堆,总是看不懂,后来自己摸索出来的. 先贴图: 如上图:有两种配置方案: 第一:用vs2012做开发编辑.只要下载和对应插件即可,安装路径不要有空格.安装好之后 ...
- 对.Net系统架构改造的一点经验和教训
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案 ...