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

需要破解的程序的主要代码如下:

 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的更多相关文章

  1. 学习笔记:暴力破解WIFI小软件

    小弟 自己的学习笔记,做练习的 ,缺陷还很多,做到无法解决速度问题就不想做下去了,如果要看的话 主要是思路问题,获取句柄,控制句柄而已,代码比较简单.大神勿喷啊 破解DEMO源码:http://dow ...

  2. C# 反编译破解软件方法

    我们有时在使用一些小工具软件时,会提示购买License(注册码之类的东东)后才能正常使用.在这里我们来尝试直接绕过License验证直接使用软件,实现简单的软件破解. 主要实现方式: 通过反编译工具 ...

  3. 微信web开发者工具、破解文件、开发文档和开发Demo下载

    关注,QQ群,微信应用号社区 511389428 下载: Win: https://pan.baidu.com/s/1bHJGEa Mac: https://pan.baidu.com/s/1slhD ...

  4. Java 多线程 破解密码 demo

    功能要求: 具体类: Decrypt  测试类,用来启动破解和日志线程 DecryptThread 破解线程类,用来生成测试的字符串,并暴力破解 LogThread 日志类,将输出每次生成的字符串结果 ...

  5. 破解 jeb 2.3.7 demo

    前言 使用的技术和上文的一样. mips 版本的修改版 修改版: https://gitee.com/hac425/jeb-mips 正文 安卓版 jeb-2.3.7.201710262129-JEB ...

  6. 【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您将懂 ...

  7. Android动态方式破解apk终极篇(加固apk破解方式)

    一.前言 今天总算迎来了破解系列的最后一篇文章了,之前的两篇文章分别为: 第一篇:如何使用Eclipse动态调试smali源码 第二篇:如何使用IDA动态调试SO文件 现在要说的就是最后一篇了,如何应 ...

  8. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  9. 移动端的拖拽这个demo实现的功能

    SQL数据库适合那些需求确定和对数据完整性要去严格的项目.NoSQL数据库适用于那些对速度和可扩展性比较看重的那些不相关的,不确定和不断发展的需求. 总所周知,网页的加载速度跟图片是有很大的关系的,因 ...

随机推荐

  1. dev 注册方法 z

    工具栏注册方法: 1.将下面的内容保存为  bat文件,放到 Components\Tools\ 目录下,然后双击执行.注意,可能需要管理员权限. 忘了一点,components.xml 文件中的 P ...

  2. Undefined symbols for architecture i386:"_OBJC_CLASS_$_xx", referenced from: 解决方法

    多个人共同操作同一个项目或拷贝项目时,经常会出现类似这样的问题: Undefined symbols for architecture i386: "_OBJC_CLASS_$_xx文件名& ...

  3. Ubuntu设置环境变量并立即生效

    Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量.系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效. 修改用户环境变量 用户环境变量通常被存储在下面的文件中: ...

  4. spring-aop示例

    具体案例放在github上,主要是jar包在上面 https://github.com/guoyansi/spring-aop-example knights.xml <?xml version ...

  5. 你可能不知道的 30 个 Python 语言的特点技巧

        列表按难度排序,常用的语言特征和技巧放在前面. 1.1   分拆 >>> a, b, c = 1, 2, 3>>> a, b, c(1, 2, 3)> ...

  6. [SQL]合并字符串

    --带符号合并行列转换 --有表t,其数据如下: /* a b 1 1 1 2 1 3 2 1 2 2 3 1 --如何转换成如下结果: a b 1 1,2,3 2 1,2 3 1 */ drop t ...

  7. FreeMarker页面中获得contextPath

    要在ftl页面中使用contextPath,需要在viewResolver中做如下配置(红色部分): <bean id="viewResolver" class=" ...

  8. SQL Server中易混淆的数据类型

    1)char.varchar.text和nchar.nvarchar.ntextchar和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据 ...

  9. 【原】linux系统运维工具必备

    操作系统:CentOS※,Ubuntu 网站服务:apache,nginx※,tomcat,tengine 开发语言:php,python※,shell※ 数据库 :Mysql※ 代理相关:lvs,k ...

  10. (转)C# MD5

    本文原地址:http://blog.csdn.net/zhoufoxcn/article/details/1497099 作者:周公 代码如下: using System; using System. ...