飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 11019|回复: 20

[讨论] 关于自己写文件补丁和内存补丁LPK

    [复制链接]

该用户从未签到

发表于 2011-3-11 22:36:42 | 显示全部楼层 |阅读模式

今天周五,主要是讲解一下怎么自己编程实现内存补丁和文件补丁

软件的下载地址: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:[4D21B4],1
004CBA09  |> \8BC3          MOV EAX,EBX

改后的
004CBA00     /75 00         JNZ SHORT Epen_exe.004CBA02
004CBA02  |. \C605 B4214D00>MOV BYTE PTR DS:[4D21B4],1
004CBA09  |>  8BC3          MOV EAX,EBX


我这里不是分析算法的,算法我没看,但是跟出了注册码,是明码比较的.我这里是演示一下用

LPK.dll 做内存补丁 和 在壳段改程序做文件补丁,自己编程实现.

文章很简单,是给新手的,高手就不要笑话了...

1.
LPk.dll :  我就用看雪老大的模板了,就只是改了一点点,源代码后面会发上来,上面注释也很全

//这个是补丁函数,把补丁代码写在里面就可以了
void PatchProcess(HANDLE hProcess)
{
        DWORD Ol**;
        
        /************************************************************************/
        /*补丁代码样例                                                               
                                                    */
        /************************************************************************/
        unsigned char p4CBA00[2] = {  
                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 00  MOV BYTE PTR DS:[4CBA01],0
0055E3B7    90                NOP
0055E3B8    90                NOP
0055E3B9    90                NOP
0055E3BA    68 30C54C00       PUSH Epen.004CC530
0055E3BF    C3                RETN


保存就可以实现注册...

注意:注册码存放在[HKEY_CURRENT_USER\Software\EPen]下

自己用代码写的补丁有好处:        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

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

评分

参与人数 1威望 +20 飘云币 +20 收起 理由
飘云 + 20 + 20

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2011-3-12 22:05:32 | 显示全部楼层
又遇到一个说“庆祝”的NC
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2011-3-13 09:47:24 | 显示全部楼层
    很不错的文章~
    但不建议使用 WriteProcessMemory 之类的,lpk已经劫持成功了,直接用rep~
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2011-3-13 11:05:33 | 显示全部楼层
    回复 3# 飘云


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

    该用户从未签到

     楼主| 发表于 2011-3-13 11:17:19 | 显示全部楼层
    回复 2# Knuth学徒


        呵呵,其实也不能说是庆祝,现在想想其实那也不是完全是自己心里的想法...
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2011-3-13 11:29:36 | 显示全部楼层
    回复  飘云


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


    恩,我那个类里面当时使用的 WriteProcessMemory 为了便于让学员理解是在写内存,实际使用时我用的rep 提高效率~
    还有 lpk那个模板里面 ReadProcessMemory 也是多余的,考虑效率的话,都得换成串指令,你自己改改咯。。
    总之,既然加载了dll了,就没必要用 WriteProcessMemory 这些了~
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2015-12-19 14:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2011-3-13 11:43:06 | 显示全部楼层
    哦 学习一下!··
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2011-3-13 19:16:15 | 显示全部楼层
    恩,我那个类里面当时使用的 WriteProcessMemory 为了便于让学员理解是在写内存,实际使用时我用的rep  ...
    飘云 发表于 2011-3-13 11:29



        谢谢老大指点...受教了
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-3-21 19:35
  • 签到天数: 255 天

    [LV.8]以坛为家I

    发表于 2011-3-13 20:58:29 | 显示全部楼层
    还是学习一下啊
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 1957 天

    [LV.Master]伴坛终老

    发表于 2011-3-14 19:35:00 | 显示全部楼层
    虽然内存注册机也能得到注册码,但自己写补丁才能学到更多
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表