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

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

 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. ucos-内存管理:

    注意:一个内存分区至少含有2个内存块(块的大小至少能满足一个指针大小) 1先定义一个内存块结构指针OS_MEM *buffMEM,在定义一个而为指针A[m][n] 2创建内存分区:buffMEM=OS ...

  2. firebug下载时出现there was an error loading firebug

    打开Firefox -> Preferences -> Advance ->Certificates 将Query OSCP....前面的checkbox取消

  3. iCheck表单美化插件使用方法详解(含参数、事件等)

    iCheck   特色: 1.在不同浏览器(包括ie6+)和设备上都有相同的表现 - 包括 桌面和移动设备 2.支持触摸设备 - iOS.Android.BlackBerry.Windows Phon ...

  4. 20145305《JAVA程序设计》课程总结

    每周读书笔记链接汇总 问卷调查 第0周学习心得 第1周学习总结 第2周学习总结 第3周学习总结 第4周学习总结 第5周学习总结 第6周学习总结 第7周学习总结 第8周学习总结 第9周学习总结 第10周 ...

  5. C++学习42 输入和输出的概念

    我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.除了以终端为对象进行输入和输出外,还经常 ...

  6. C++学习11 类和new、delete操作符 类与const关键字

    如果你是Java.C#.PHP程序员,那么会对 new 非常熟悉,在这些编程语言中,只能通过 new 来创建对象. 在C++中,你可以像定义变量一样来创建对象,如: Student stu; //对象 ...

  7. 采用p6spy完整显示hibernate的SQL语句

    虽然在hibernate中有show_sql选项,但是显示出来的语句大多类似 select * from xxx where value=? 但是有时候我们需要得到完整的SQL语句,怎么办呢?使用P6 ...

  8. [POJ 1385] Lifting the Stone (计算几何)

    题目链接:http://poj.org/problem?id=1385 题目大意:给你一个多边形的点,求重心. 首先,三角形的重心: ( (x1+x2+x3)/3 , (y1+y2+y3)/3 ) 然 ...

  9. 推荐一个代码生成工具:freemarker

    freemarker:http://freemarker.org/ 还有velocity:http://velocity.apache.org/

  10. SQL必知必会笔记(1)

    去SQL AXDB 中Query数据 Open the SQL > Connect > Select AXDB > new Query select REFID, ITEMID, R ...