飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 9862|回复: 15

飘云老大的 CrackMe #3 For PYG5.4 Cracker的LOADER实现方法

[复制链接]

该用户从未签到

发表于 2006-6-19 13:33:39 | 显示全部楼层 |阅读模式
飘云老大为我们初学者小组提供了这个 CrackMe #3 For PYG5.4 Cracker,要求用LOADER来实现。当时初学,直接脱壳,暴破完成了。现在把用LOADER技术的方法写出来,与飘云老大及各位学友交流下。

一、我对LOADER的理解
LOADER,我自己理解就是一段加载程序,由它来把原来的程序运行起来,并在它的控制下,来完成对原程序的一些动态修改。
自己用过一些用LOADER破解的软件,如JCREATOR PRO,对那个LOADER的图标印象深刻,呵呵~~~~~~,不知道也没有生成LOADER的工具(很多LOADER的图标都是一样的)?

二、简单的LOADER实现思路

简单的LOADER我以为就是加载入程序后,动态写内存,和SMC类似,不同的是SMC一般是对文件本身做了修改,代码已经写在文件里了,而LOADER则是在软件加载或运行后,才把自己需要的代码写进去的。
最简单的方式就是用READPROCESSMEMORY和WRITEPROCESSMEMORY来实现,基本上就是把OD中对代码进行汇编的操作用程序来完成。只要找到要修改的地址和代码,然后WRITE到那个软件的进程进去就可以了。

三、复杂的LOADER实现

我只做了这一个LOADER的练习,实在讲是没资格说这些,不过一点心得与友分享下。复杂的LOADER我目前知道的是借助WINDOWS的调试API来成的,就是自己应用调试API,来写一个自己的小调试器,这样可以设置自己所需的断点,单步执行等功能。应用WAITFORDEBUGEVENT等API来实现。

四、飘云老大的CrackMe #3 For PYG5.4 Cracker的LOADER实现

这个CRACKME应该是有个壳的,不过没查出来。用OD调试时,用ESP可以脱掉,DUMP出来可以自动运行。
其中关键地址有如下三个:
BREAKADDRESS: DWORD = $40A413;\\JMP OEP
ADDRESS1: DWORD = $40102A;\\第一个去单实例检验的地方
ADDRESS2: DWORD = $401037;\\第二个去单实例检验的地方

如果简单来做的话,可以在脱壳后的程序基础上用简单LOADER实现的方法来完成,只要WRITEPROCESSMEMORY把ADDRESS1,ADDRESS2内的地址写9090(NOP NOP)就可以了。

不过如果完全按照要求的话,我想应该是不脱壳的基础上来完成。这就有一个难点在于:未脱壳前,ADDRESS1,ADDRESS2的内容还是空的,没有脱壳后的代码,只有等到脱壳后才可以进行WRITEPROCESSMEMORY的操作。所以,这就需要用到DEBUG API,我们需要的结果是:如同在OD中一样,在JMP OEP这个地址时,能够中断下来。这时,ADDRESS1,ADDRESS2内已是真正的代码,可以修改代码为NOP。

所以应用DEBUG API需要这样做,在第一次断点时,在BREAKADDRESS处写CC(INT 3 中断),以便执行到JMP OEP这个地址时能够引发下次中断。然后在第二次中断时,我们知道已经完全脱壳,ADDRESS1,ADDRESS2中为真正代码,此时再把NOP写入到这两个地址中,并且恢复原来BREAKADDRESS处的代码。这样,就相当于我们在OD所完成的操作了。


有一些关键词可以方便大家在网上找到自己所需的资料:
WRITEPROCESSMEMORY
READPROCESSMEMORY
WAITFORDEBUGEVENT
也可查MSDN。


初次接触LOADER,不知有没有其它更简单的方法(或者生成工具),请大家指教~~~~~~~~~~~


我做了一个,请参见:https://www.chinapyg.com/viewthr ... &extra=page%3D1

[ 本帖最后由 caterpilla 于 2006-6-19 13:39 编辑 ]

评分

参与人数 1威望 +20 收起 理由
obi-one + 20

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2006-6-19 16:34:22 | 显示全部楼层
好文适合我
PYG19周年生日快乐!

该用户从未签到

发表于 2006-6-19 18:14:32 | 显示全部楼层
学习了,谢谢!!
PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2020-7-7 10:06
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2006-6-19 19:21:14 | 显示全部楼层
    兄弟把Loader的原代码贴出来啊,让大家学习学习。

    我们上论坛不就是为了技术分享吗?
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-19 20:20:47 | 显示全部楼层
    挺陌生的名词,谁叫我是门外汉呢,先学一点吧!
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2020-7-7 10:06
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2006-6-20 00:31:03 | 显示全部楼层
    兄弟根据跟踪调试主题[CRACKME算法分析之绝对陷阱]里的CrackMe,写了一个读写内存的例子,里面包含源代码。

    大家可以参考一下,也许对写Loader程序有所帮助。

    读写内存---拦截API函数[源代码]
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    7 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2006-6-20 07:09:32 | 显示全部楼层
    原帖由 spc_cll 于 2006-6-20 00:31 发表
    兄弟根据跟踪调试主题里的CrackMe,写了一个读写内存的例子,里面包含源代码。

    大家可以参考一下,也许对写Loader程序有所帮助。

    读写内存---拦截API函数


    妙哉!这才是解这个CrackMe的正确方法!
    兄弟何不DELPHI--ASM?  那样文件就小了!
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2018-12-10 18:30
  • 签到天数: 70 天

    [LV.6]常住居民II

    发表于 2006-6-20 08:00:01 | 显示全部楼层
    不知我做的这个算不算LOADER,对CRACKME#3的
    附件: [LOADER] crack3Prj.rar (2006-6-10 19:32, 176.07 K)
    该附件被下载次数 8

    试了一下,好像不能连续LOAD
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2006-6-20 08:48:08 | 显示全部楼层
    原帖由 hbqjxhw 于 2006-6-20 08:00 发表
    不知我做的这个算不算LOADER,对CRACKME#3的
    附件:  crack3Prj.rar (2006-6-10 19:32, 176.07 K)
    该附件被下载次数 8

    试了一下,好像不能连续LOAD


    目前做的LOADER比较笨,只能LOAD一个,多开需要运行多个LOADER来完成。
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2006-6-20 08:52:03 | 显示全部楼层
    原帖由 飘云 于 2006-6-20 07:09 发表


    妙哉!这才是解这个CrackMe的正确方法!
    兄弟何不DELPHI--ASM?  那样文件就小了!

    果然是高手,佩服SPC_CLL和飘云,原解应该是修改一下CREATEMUTEX?
    要挂到别的进程,是否还得用HOOK?

    看来我又走弯道了。。。。。。。。:L

    [ 本帖最后由 caterpilla 于 2006-6-20 09:20 编辑 ]
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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