关于自己写文件补丁和内存补丁LPK
今天周五,主要是讲解一下怎么自己编程实现内存补丁和文件补丁
软件的下载地址:http://www.vdisk.cn/liuqiangni
无意中在电脑上面发现这样个软件(屏幕画笔),都不知道是什么时候下载的,运行后,居然还要
注册? 程序加了ASPack 2.12 -> Alexey Solodovnikov的壳,我也没脱,带着壳跑了下,下了个
MessageBox断点.断下后,搜索了字符串,程序很简单,有字符串提示,于是很快找到突破口,大致看
了一下,改一个字节就可以了.
原来的:
004CBA00|. /75 07 JNZ SHORT Epen_exe.004CBA09
004CBA02|. |C605 B4214D00>MOV BYTE PTR DS:,1
004CBA09|> \8BC3 MOV EAX,EBX
改后的
004CBA00 /75 00 JNZ SHORT Epen_exe.004CBA02
004CBA02|. \C605 B4214D00>MOV BYTE PTR DS:,1
004CBA09|>8BC3 MOV EAX,EBX
我这里不是分析算法的,算法我没看,但是跟出了注册码,是明码比较的.我这里是演示一下用
LPK.dll 做内存补丁 和 在壳段改程序做文件补丁,自己编程实现.
文章很简单,是给新手的,高手就不要笑话了...
1.
LPk.dll :我就用看雪老大的模板了,就只是改了一点点,源代码后面会发上来,上面注释也很全
//这个是补丁函数,把补丁代码写在里面就可以了
void PatchProcess(HANDLE hProcess)
{
DWORD Ol**;
/************************************************************************/
/*补丁代码样例
*/
/************************************************************************/
unsigned char p4CBA00 = {
0x75, 0x00
};
VirtualProtectEx(hProcess, (LPVOID)0x4CBA00, 2, PAGE_EXECUTE_READWRITE,
&Ol**);
WriteProcessMemory(hProcess, (LPVOID)0x4CBA00, p4CBA00, 2, NULL);
}
2.
文件补丁:因为程序加壳了,我们知道程序代码是动态解压出来的,我们直接改是无法保存的,但
是我们可以在壳段加入代码,间接的来修改我们程序中的代码.
下面开始,我们用Esp定律可以来到程序的入口点
0055E3B0 /75 08 JNZ SHORT Epen.0055E3BA;这里会跳过去
0055E3B2 |B8 01000000 MOV EAX,1
0055E3B7 |C2 0C00 RETN 0C
0055E3BA \68 30C54C00 PUSH Epen.004CC530;将程序的入口点压栈
0055E3BF C3 RETN ;这里是跳到入口点
我们将上面几句NOP掉,写上我们自己的代码,也就是修改004CBA00处的2个自己为7500,
我们这样来改
0055E3B0 C605 01BA4C00 00MOV BYTE PTR DS:,0
0055E3B7 90 NOP
0055E3B8 90 NOP
0055E3B9 90 NOP
0055E3BA 68 30C54C00 PUSH Epen.004CC530
0055E3BF C3 RETN
保存就可以实现注册...
注意:注册码存放在下
自己用代码写的补丁有好处: 1.不会被杀软盯上 2.生成的文件很小
所以我很赞成自己来写补丁.
下面我们编程来实现:(MFC)
//我使用的是CFile 类来读写文件的
void patch()
{ //这里是我们要修改的地址
char reg[] = {0xC6,0x05,0x01,0xBA,0x4C,0x00,0x00,0x90,0x90,0x90};
CFile myfile;
CopyFile("Epen.exe","Epen.exe.bak",TRUE);//备份文件
myfile.Open("Epen.exe",CFile::modeReadWrite|CFile::typeBinary,NULL);
myfile.Seek(0x0006E7B0,CFile::begin);//移动文件指针
myfile.Write(reg,sizeof(reg)); //写文件
}
这样,文件补丁就写好了,当然也可以用APi来写(CreateFile,SetFilePointer,WriteFile)
来写.
给一组正确的注册号码:
LiuQiang_China
0BA1AB67A033304A8EEAD62086B971B9
好了,就写到这了,谢谢观看,高手飘过... 又遇到一个说“庆祝”的NC 很不错的文章~
但不建议使用 WriteProcessMemory 之类的,lpk已经劫持成功了,直接用rep~ 回复 3# 飘云
谢谢飘云老大鼓励,不过我记得,飘云老大做过一个视频<<揭开LPK神秘面纱_精装友情通讯录绿化讲解>>,当时正是在学HOOK ,这个视频里面,我很认真的看了好几遍,也自己测试了,但是HOOK不到,我不知道是怎么回事,也是按你上面说的做的,那个类我也看了觉得没有什么问题,但是改了就是HOOK不到,就是用你给的那个LPK,也无法完成绿化,怎么回事呢? 回复 2# Knuth学徒
呵呵,其实也不能说是庆祝,现在想想其实那也不是完全是自己心里的想法... 回复飘云
谢谢飘云老大鼓励,不过我记得,飘云老大做过一个视频,当时正是在学HOOK ,这个视频里面 ...
liuqiangni 发表于 2011-3-13 11:05 https://www.chinapyg.com/images/common/back.gif
恩,我那个类里面当时使用的 WriteProcessMemory 为了便于让学员理解是在写内存,实际使用时我用的rep 提高效率~
还有 lpk那个模板里面 ReadProcessMemory 也是多余的,考虑效率的话,都得换成串指令,你自己改改咯。。
总之,既然加载了dll了,就没必要用 WriteProcessMemory 这些了~ 哦 学习一下!·· 恩,我那个类里面当时使用的 WriteProcessMemory 为了便于让学员理解是在写内存,实际使用时我用的rep...
飘云 发表于 2011-3-13 11:29 https://www.chinapyg.com/images/common/back.gif
谢谢老大指点...受教了 还是学习一下啊 虽然内存注册机也能得到注册码,但自己写补丁才能学到更多