加密与解密(内嵌补丁)

来源:互联网 发布:future说唱知乎 编辑:程序博客网 时间:2024/06/03 22:42
    内嵌补丁,就是在该程序的汇编代码中嵌入一些其他的代码。

    一般使用的情况:想要修改该程序的执行过程、数据,但是修改出机器码会覆盖下面的代码。
    具体使用:寻找该程序的一些因为文件对齐而填充数据的位置,在修改的位置改成jmp,jmp到该位置····

    推荐视频教程:鱼C工作室_加密与解密系列_OD使用教程

    破解实战:过期限制的
DVDMenuStudio(影片菜单制作工具)软件

    
    用PEID查一下,是VC6写的程序,打开的时候本来有30试用,但是我调了系统时间,跳过了这段时间,重开的时候就如图,需要购买才能继续使用。

    也许程序里面有一个计时器,到30天的时候就关了这个计时器吧,查一下Killtimer这个API。(教程里让我们查一个API)
    接着所有Killtimer下断点;
    运行该程序,输入注册码之后在这个位置断下来了;


    往上翻看到了这个,猜想:这个switch应该就是判断是否注册成功的判断吧,根据判断顺便做出所对应的操作;

    有1~B种情况,一个一个看看;


    

    
    有两个switch,如果数据是4的话就注册成功,如果数据是B的话执行的代码是重绘窗口以及退出这个switch;
    由于看了教程所以提前得知B才是出口,如果是4的话会进入死循环跑不出来;
    
    所以我们修改关键数据;找到可修改数据的位置;

    switch位置的cmp判断的是eax,也就是说关键数据存在eax寄存器里,找找在哪里eax被修改了;

    如果觉得是直接修改成mov eax,0B就OK了,那就大错特错了;
    
    对比后发现,之前下面两个push指令被覆盖了,这是因为本身机器码设计的原因,所以我们只能想想其他办法;
    程序一般会为了文件对齐/内存对齐而在一些地方填充一些没有意义的数据,可以在该位置写修改数据的指令,已经覆盖的指令,在修改的位置jmp到该位置,再jmp回到原来的第二条指令即可;
    
    
    
    看不懂请勿喷;
    内嵌补丁是一种手段,该怎么用还是得看自己咯。
0 0
原创粉丝点击