liuqiangni 发表于 2011-3-11 22:36:42

关于自己写文件补丁和内存补丁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

好了,就写到这了,谢谢观看,高手飘过...

Knuth学徒 发表于 2011-3-12 22:05:32

又遇到一个说“庆祝”的NC

飘云 发表于 2011-3-13 09:47:24

很不错的文章~
但不建议使用 WriteProcessMemory 之类的,lpk已经劫持成功了,直接用rep~

liuqiangni 发表于 2011-3-13 11:05:33

回复 3# 飘云


    谢谢飘云老大鼓励,不过我记得,飘云老大做过一个视频<<揭开LPK神秘面纱_精装友情通讯录绿化讲解>>,当时正是在学HOOK ,这个视频里面,我很认真的看了好几遍,也自己测试了,但是HOOK不到,我不知道是怎么回事,也是按你上面说的做的,那个类我也看了觉得没有什么问题,但是改了就是HOOK不到,就是用你给的那个LPK,也无法完成绿化,怎么回事呢?

liuqiangni 发表于 2011-3-13 11:17:19

回复 2# Knuth学徒


    呵呵,其实也不能说是庆祝,现在想想其实那也不是完全是自己心里的想法...

飘云 发表于 2011-3-13 11:29:36

回复飘云


    谢谢飘云老大鼓励,不过我记得,飘云老大做过一个视频,当时正是在学HOOK ,这个视频里面 ...
liuqiangni 发表于 2011-3-13 11:05 https://www.chinapyg.com/images/common/back.gif

恩,我那个类里面当时使用的 WriteProcessMemory 为了便于让学员理解是在写内存,实际使用时我用的rep 提高效率~
还有 lpk那个模板里面 ReadProcessMemory 也是多余的,考虑效率的话,都得换成串指令,你自己改改咯。。
总之,既然加载了dll了,就没必要用 WriteProcessMemory 这些了~

kalahan 发表于 2011-3-13 11:43:06

哦 学习一下!··

liuqiangni 发表于 2011-3-13 19:16:15

恩,我那个类里面当时使用的 WriteProcessMemory 为了便于让学员理解是在写内存,实际使用时我用的rep...
飘云 发表于 2011-3-13 11:29 https://www.chinapyg.com/images/common/back.gif


    谢谢老大指点...受教了

gsl27 发表于 2011-3-13 20:58:29

还是学习一下啊

wkxq 发表于 2011-3-14 19:35:00

虽然内存注册机也能得到注册码,但自己写补丁才能学到更多
页: [1] 2 3
查看完整版本: 关于自己写文件补丁和内存补丁LPK