且行且远
分类: 逆向手札 由 ssfighter 于 2006年8月11日 发表

终于搞定了围棋助手的自校验和全部Nag窗口,呼呼,真是难弄啊。想起来我第一次调试围棋助手这个软件的时候还是刚开始学破解,连什么是自校验都不知道呢,那个时候发现围棋助手是UPX-Scrambler加的壳,还跑到网上去找这个壳的专业脱壳工具,想起来真是有点可笑啊,不过那个时候把壳脱掉之后就发现程序不能启动,而且CPU一下子就到100%了,内存也瞬间就不够用了,当时还以为是脱壳脱的不好呢,因为以前围棋助手是用Armadillo加的壳,还傻傻地以为是脱Arm的壳脱的问题呢,hoho。后来知道了有自校验这回事,但是根本不知道怎么去除自校验,前段时间终于又下狠心研究一下,忽然发现还是很容易的啦。这个程序的自校验多的不可胜数,看来作者也是在防破解这方面下了很大的工夫的,不过就有一点不是很好,我以前购买过正版,但是好像每次新版本的正版验证程序都不一样,弄得我以前的正版Key都不好用,也懒得去再发邮件给作者换Key,就破解了先用着吧。

脱壳去自校验已经过了好几天了,估计都忘的差不多了,所以就简单说明一下吧。这个程序目前最近版本是8.76,保护方式还是UPX-Scrambler RC1.x -> ㎡nT畂L,脱壳不是很难,手脱和用工具都差不多。脱掉之后不能急着运行,否则电脑肯定崩溃。用OD载入,可以发现CPU一下子就到100%了,不要着急,马上点暂停键,这也是对付消耗系统资源类的自校验的一般方法。停下来之后按若干次Ctrl+F9,可以回到程序领空,来到第一处自校验点:


0041A886    84DB            test    bl, bl
0041A888    8BF8            mov     edi, eax
0041A88A    75 0F           jnz     short 0041A89B
0041A88C    68 401F0000     push    1F40
0041A891    E8 601C0700     call    <jmp.&MFC42.#823_operator new>
0041A896    83C4 04         add     esp, 4
0041A899  ^ EB F1           jmp     short 0041A88C
0041A89B    8BCE            mov     ecx, esi

从这里,我们知道消耗系统资源的办法就是不断调用new函数,做成一个死循环,那么很好办,把前面的jnz改成jmp强制跳转即可。同时记住这种消耗系统资源的关键代码:83 C4 04 EB F1,于是,我们可以在程序的整个空间搜索这样的关键代码,找到的都是这种自校验点,把前面的跳转都改成强制跳转即可消除这种自校验,而不是遇到了一个自校验点分析一个校验点,那样比较慢而且也找不全,如果我没记错的话,这种自校验消耗系统资源的方法程序中用了五次,具体在哪里用的我也不知道,以上称为自校验一。

第二种自校验,也是以消耗系统资源为目的的,我们搜索ASCII码”500″,来到这里:


0042C16E    3C 08           cmp     al, 8
0042C170    74 59           je      short 0042C1CB
0042C172    3C 5D           cmp     al, 5D
0042C174    74 55           je      short 0042C1CB
0042C176    3C ED           cmp     al, 0ED
0042C178    74 51           je      short 0042C1CB
0042C17A    C646 44 01      mov     byte ptr [esi+44], 1
0042C17E    C686 72DC0200 0>mov     byte ptr [esi+2DC72], 1
0042C185    E8 80040600     call    <jmp.&MFC42.#1168_AfxGetModuleSt>
0042C18A    8B40 04         mov     eax, [eax+4]
0042C18D    B3 0D           mov     bl, 0D
0042C18F    C680 C4000000 0>mov     byte ptr [eax+C4], 1
0042C196    68 A09A4B00     push    004B9AA0                         ; 500
0042C19B    8D4C24 24       lea     ecx, [esp+24]
0042C19F    E8 82030600     call    <jmp.&MFC42.#537_CString::CStrin>
0042C1A4    68 A00F0000     push    0FA0
0042C1A9    889C24 00010000 mov     [esp+100], bl
0042C1B0    E8 41030600     call    <jmp.&MFC42.#823_operator new>
0042C1B5    83C4 04         add     esp, 4
0042C1B8    8D4C24 20       lea     ecx, [esp+20]
0042C1BC    C68424 FC000000>mov     byte ptr [esp+FC], 0C
0042C1C4    E8 4B030600     call    <jmp.&MFC42.#800_CString::~CStri>
0042C1C9  ^ EB CB           jmp     short 0042C196
0042C1CB    8D4C24 30       lea     ecx, [esp+30]

这里在42C196~42C1C9之间也是一个死循环,只要把前面的三个跳转中任何一个改成强制跳转即可跳过这个自校验,程序中一共可以找到两处这种校验方式,以上称为自校验二。

第三种自校验,是以直接退出程序为目的的,当选择保存棋谱的时候会出现被调试的程序无法处理异常的问题而直接退出,我们下CreateFileA断点,当点击保存的时候程序断下,两次Ctrl+F9返回程序领空,来到这里:


0043E8CF    E8 8EDC0400     call    <jmp.&MFC42.#3318_CFile::GetLength>
0043E8D4    3D 007E0500     cmp     eax, 57E00
0043E8D9    74 22           je      short 0043E8FD
0043E8DB    E8 2ADD0400     call    <jmp.&MFC42.#1168_AfxGetModuleState>
0043E8E0    8B48 04         mov     ecx, [eax+4]
0043E8E3    6A 00           push    0
0043E8E5    C681 C4000000 0>mov     byte ptr [ecx+C4], 1
0043E8EC    C646 44 01      mov     byte ptr [esi+44], 1
0043E8F0    C686 72DC0200 0>mov     byte ptr [esi+2DC72], 1
0043E8F7    FF15 38EB4900   call    [<&msvcrt.exit>]              ; MSVCRT.exit
0043E8FD    8D4C24 1C       lea     ecx, [esp+1C]

这里又验证了一下程序的长度,不等于57E00就退出程序,因此把43E8D9这里的跳转也改成强制跳转即可,同时记住这个自校验的关键代码:3D 00 7E 05 00 74 22,在程序中找这样的关键代码,一共有三处,修改其前面的跳转即可,以上称为自校验三。

经过我的使用来看,程序好像一共就这三种自校验,一共有10处,可见作者在防破解这方面倒是颇下了一番工夫的。下面我们来去掉恼人的Nag窗口。Nag窗口一共有两处,一处是退出的时候会有提示问你是否要注册,一处是程序运行一段时间之后弹出窗口,要求注册,而且这种弹出窗口在刚运行的时候不会出现,当有弹出之后就会经常性弹出,在我最开始没注册的时候只好每次先退出程序再进入,后来给我逼的没办法了我就去注册了一份:P

先看第一处,这个比较容易,下MessageBoxA断点,关闭程序之后断下,几次Ctrl+F9之后回到这里:


004677FF    84C0            test    al, al
00467801    75 4A           jnz     short 0046784D
00467803    8D4C24 08       lea     ecx, [esp+8]
00467807    E8 144D0200     call    <jmp.&MFC42.#540_CString::CString>
0046780C    68 E0F80000     push    0F8E0
00467811    8D4C24 0C       lea     ecx, [esp+C]
00467815    C68424 50030000>mov     byte ptr [esp+350], 1
0046781D    E8 164D0200     call    <jmp.&MFC42.#4160_CString::LoadStringA>
00467822    8B5424 08       mov     edx, [esp+8]
00467826    6A 00           push    0
00467828    6A 04           push    4
0046782A    52              push    edx
0046782B    E8 624D0200     call    <jmp.&MFC42.#1200_AfxMessageBox>

非常简单,把467801处的jnz修改为jmp即可,这样就可以去除退出程序时候的断点了。

第二处,程序运行时弹出的Nag窗口,找ASCII字符串参考”4444444″,找到来到这里:


0042E123    E8 6AE70500     call    <jmp.&MFC42.#2514_CDialog::DoModal>     ; 这个就是弹出窗口
0042E128    8BD8            mov     ebx, eax
0042E12A    83FB 01         cmp     ebx, 1
0042E12D    75 11           jnz     short 0042E140
0042E12F    8A86 A8DD0200   mov     al, [esi+2DDA8]
0042E135    84C0            test    al, al
0042E137    75 07           jnz     short 0042E140
0042E139    8BCE            mov     ecx, esi
0042E13B    E8 5090FFFF     call    00427190
0042E140    68 189A4B00     push    004B9A18                                ; 4444444

往上翻,可以看到这里:


0042E059    84C0            test    al, al
0042E05B    0F85 67010000   jnz     0042E1C8
0042E061    8A86 F6CC0200   mov     al, [esi+2CCF6]
0042E067    84C0            test    al, al
0042E069    75 0E           jnz     short 0042E079
0042E06B    8A86 F5CC0200   mov     al, [esi+2CCF5]
0042E071    84C0            test    al, al
0042E073    0F84 4F010000   je      0042E1C8

修改42E05B处的跳转为jmp强制跳转即可,42E073处修不修改都可以了。

程序中还有一处”4444444″的字符串参考,找到后继续往上翻,来到这里:


0043D669    84C0            test    al, al
0043D66B    74 0E           je      short 0043D67B
0043D66D    8A86 AADD0200   mov     al, [esi+2DDAA]
0043D673    84C0            test    al, al
0043D675    0F85 72010000   jnz     0043D7ED
0043D67B    8A86 F6CC0200   mov     al, [esi+2CCF6]
0043D681    84C0            test    al, al
0043D683    75 0E           jnz     short 0043D693
0043D685    8A86 F5CC0200   mov     al, [esi+2CCF5]
0043D68B    84C0            test    al, al
0043D68D    0F84 5A010000   je      0043D7ED
0043D693    8A46 5D         mov     al, [esi+5D]
0043D696    84C0            test    al, al
0043D698    0F85 4F010000   jnz     0043D7ED

把43D675、43D68D和43D698处的跳转都改成强制跳转就可以了,这样就可以去除程序运行之中的恼人的Nag窗口了。

至此,程序的自校验和Nag窗口已经全部去除,当初破解的时候也没想详细分析注册算法,所以就用了这样的方式破解了,不过自己越来越不喜欢用爆破的版本了,哪怕是自己爆破的也觉得不爽,看来还是要找作者要一份新的Key啊,hoho。


分类: 随心所记 由 ssfighter 于 2006年8月9日 发表

想起来最近要做的事情还颇多的,就记在这里吧,以免自己忘记

1 表妹很快就要去米国读大学了,上大学之前怎么说也要再见见面,吃个饭啥的吧,虽然说人家可能看不上我,但我这个当哥哥的怎么说也要尽一份感情吧,以前对我表妹一点都不好,想起来还真挺对不起人家的,所以最近就抓紧点时间,陪表妹一下。

2 Python语言要抓紧学,刚看了一下python的入门,觉得还是门槛有点高的,不过看起来应该和我要做的东西能够吻合的不错,所以这个是当务之急啊,要抓紧学,至少在这周之内要把基本的东东都搞定。

3 把要做的那个东东的算法再好好细化分析一下,本来早就要睡觉的,躺在床上一直在想DIV啊TABLE啊啥的,觉得想的差不多了,结果看一下实际的论坛发现远没自己想的那么简单,但是我想应该也不需要用最笨的方法吧,既然document给了那么多可以用的操作,而且又是用python来写,应该可连接性还是不错的,还得再细化一下算法,这个要在周五之前完成。

4 今天突发奇想,要做一个能显完整IP的Maze客户端,想了一下估计那边发包的时候是发的完整的IP过来的,然后客户端这边再通过判断用户的等级来决定是遮盖几位(也不确定),比较好的地方是在主程序中找到了”.*.*”这样的字符串参考,不过时间比较晚了,就没跟,仅仅设上了断点而已,这周如果有时间可以跟一下试试,可能的话把这个显完整IP的客户端做出来。

5 其他的就是一些琐事了,也算是长期的任务吧。首先,书还是要看,已经看了那么久了不能就这么放弃。其次,账还是要坚持记的。再次,多关心一下唐唐,最近事情太多太烦,对唐唐总是挺冷的,心里也过意不去,还是要多关心一下人家的,一个人天天呆在家里也挺无聊的,哈哈。 就这么多吧,要加油的。


分类: 岁月流光 由 ssfighter 于 2006年8月8日 发表

不知道这个续会不会是最后一个续了,上一篇回忆我的高中的文章写出来到现在也快一个月的时间了,不是我不想写也不是因为我懒,是因为我对我的高中的支离破碎的回忆已经再难以撑起一个完整的高中了,尽管记忆深处好似还有那么一些未曾泯灭的痕迹,然而那些恐怕都已经是我所触摸不到的了,也好,就让那些我所触摸不到的东西永远触摸不到吧,就让它们静静地呆在我记忆的深处,随着时间的流逝而日益闪光好了。不过,该写的还是得写,继续接着上面的来吧。

18. 高中时候最让我不爽也是最让我有愤青冲动的就是学生的发型。刚上高中的时候,学校对发型没有什么硬性的要求,唯一的要求也只是不要留怪发型而已,这点我当时算是可以理解(现在却理解不了了),当时觉得毕竟高中就是一个学习的地方,弄的不三不四的对学校影响也不太好。后来校领导在这个基础上就慢慢地发展了,变成了女生不能留长发,头发不能盖住耳朵,因为低头学习的时候头发会垂下来挡住眼睛,这样影响读书。再后来连男生都管了,要求所有男生必须只能留平头,像我现在这样的发型肯定是不会合格的了。现在想起来依然觉得对学校的政策忍无可忍,不过那时候怎么就忍了呢?呼呼,估计当时对我们实验班学生的限制也不是那么严,所以我估计也就不多计较了吧,当然也被抓住过几次,而且每周学校检查发型的时候我都心惊胆战的。现在想起这件事情来仍然特别想愤青,我真的是不明白一个学生的头发和学习成绩有什么关系?为什么一个个男生都要留寸头,弄得像监狱里面的犯人一样,为什么好好的小姑娘不能追求美丽,非要把所有人都禁锢成一个模型?说到底还是校领导觉得这样看起来比较整齐而已,可是他们却没有想到,在你限制外在的时候其实也就在限制内心,在你禁锢发型的时候其实也就在禁锢思想。算了,老大不小的了,也不想再愤青太多了,只是不知道现在的师弟师妹们还是不是在受着这种恶心的条款的束缚。

19. 高中时候有一件事一直让我觉得既好笑又羡慕。隔壁班有个“富哥”,勾搭上了比我们大一届的某个师姐,那个师姐论长相论身材都是上乘啊,尤其夏天的时候,会有让我们流鼻血的冲动……真的……后来不知道怎么就让我们隔壁这位给搞上了。一开始他们利用中午时间去女方家里xx,连中午饭都不吃(真是好体力啊),一直相安无事,后来有一天不知道怎么,那个师姐的老爸突然中午时间回来了,结果正好捉奸在床,可怜我的那个同学啊,被捉的时候连自己的内裤在哪里都还没找到呢*^^* 后来他们也就不敢再在女方家里了,但是我同学有钱啊,他们就到外面大宾馆去开房,每次都在希尔顿(4星级的哦,我只住过一晚4星级的酒店,还是跟老爸住的),一直到后来女方估计实在是忍不了了,再开房的时候终于说了:“啊?怎么又是希尔顿?????”(我靠,在希尔顿ML还不够啊,给我50块一晚的标间我都干啊,当然对我来说,野外也是可以的^^)

20. 记得有一次上计算机课,那个时候机房的电脑都是联网的,教室机上的各个磁盘也都是共享的,可以通过网上邻居很容易地访问,我们就在老师上课的时候到老师的电脑上找有没有什么好玩的东西(估计和偷窥拥有同样的快感吧),有次某人忽然在老师的光驱上面发现了一张带色的图片。其实也就是一个女的穿着一件很薄的纱衣,胸前两点隐隐露出而已,至少拍的挺艺术的,不能用色情的眼光去看:) 但我们那个时候还基本都是楞头小子(排除我上面提到的那个牛同学哦),还没怎么见识过这些东西(虽然我记得我初中时候就在线看xx片了),所以几乎每个人都连到老师的电脑上看图片了,过了一会儿老师忽然问:“我的电脑现在为什么这么慢?”(ft,那么多人都在你电脑上面看图片,当然慢了,谁让你放这么猛的光盘的!)

21. 一直以来,我都很感激我高中的化学老师张凤华老师。我今天能坐在清华的教室里面念书其实有很大的功劳都是张老师给我的,我从对化学的懵懂认识到后来的化学竞赛,如果没有张凤华老师,我不可能走那么远。上大学前给老师买了一支ZIPPO的火机,也不知道他是否喜欢,不过有点助长他抽烟的势头:) 可惜上大学之后学的东西就已经和化学毫不相干了。很对不起老师的是,大一寒假的时候回学校,竟也没有抽出时间好好去看看老师,和老师聊聊,也不知道张老师现在如何了,现在在THU混了三年多了,一无所成,每每想起来都会觉得很对不起老师,高三的时候信息学竞赛没有考出好成绩,就已经是挺对不起老师的了,上了大学竟又那么贪玩,到今天更是没有脸面回去再看老师了,远在北京的我只希望老师能够平安吧,少抽点烟,您也是搞化学的,也知道那东西对身体没任何好处,可能的话还是争取戒了吧……

22. 高一的时候参加信息学竞赛,代表大连市到省里比赛之前,那时候的班主任白亚光老师送给我一个本子,第一页上面写着:“你是大高的骄傲,也是我的骄傲!”这个本现在被我用来做政治笔记,每当看到这个本子的时候,都会有一种莫名的触动,六年前,六年前的时候,我还只是一个高一的小孩子的时候,尚且被老师予以那么高的评价,给予那么高的期望,可是六年之后呢?在陌生的城市里,陌生的学校里,我还有配得上当年老师给予的那么高的评价和期望吗?现在剩下的估计只是无尽的懊悔了吧,没有脸面再去面对白亚光老师,没有脸面再面对那么高的希望啊……

未完待续……


分类: 随心所记 由 ssfighter 于 2006年8月7日 发表

会不会显得稍微有点BT?抑或是过于女人气?呼呼,管不了那么多了,忽然觉得记账还是挺有意思的一件事情,可能是自己从小就有葛朗台的胚子吧,很喜欢数钱,也特别喜欢算计我还有多少钱,总觉得手里有钱是件超级幸福的事情,哇咔咔,不过从来就挣不到钱啊,这倒是挺郁闷的……
anyway,现在每天一开电脑就打开财智家庭理财,然后把一天的花费记在上面,这样也能监督一下自己一个月之内有没有不必要的花费,也好敦促自己以后改正,跟老妈说了理财的事情,老妈还是比较支持的,不像偶mm,总觉得没啥用,咔咔,虽然偶现在也不知道到底有啥大用处*^^*
最近想买点基金了,打听了一下这方面的信息,感觉还是蛮有用的,至少比存钱好,现在银行存款的利率也太低了,存好几千块钱最后拿出来的时候利息才四十多,想起来就太不爽了,呜呜呜,曾经想买国债来着,听说国债不如基金合适,还是琢磨着有点时间的话买点基金玩玩,不过不要想赚的太多就好了,否则就像买股票一样,今天想着能多赚一点,明天想着能把本捞回来,最后弄得自己心里憔悴的也不好是吧,hoho,投资这种东西还是要摆好心态呀……
老妈倒是说可以给我点钱让我买基金玩玩,不过最近比较忙,要学的东西一堆一堆的,估计也没有太多闲工夫弄这些东西,所以就没要钱,不知道啥时候俺才能清闲一点能够玩玩自己想玩的东西呢?呼呼……


分类: 随心所记 由 ssfighter 于 2006年8月6日 发表

以前花钱不但大手大脚,而且从来不记账,印象中好像大一时候记过10来天的账就记不下去了,所以弄得自己的钱总是算不明白,想起来自己也是个糊涂人,借给别人几百块钱说忘就忘了,借别人的钱有的时候也会莫名其妙地就忘了,弄得人家找我要的时候还怪不好意思的,自己也的确不是存心不还的,呜呜呜。
以前家人给我的钱我有的时候就忘抽屉里一放,或者是往银行活期一存,然后今天提一百明天提一百,一段时间之后银行里面的钱莫名其妙地没有了,自己想了半天也想不出来到底是花在啥地方了,这就叫郁闷啊,早就想好好学学理财,也想好好把自己的钱管理一下,曾经想加入理财协会,后来因为种种原因未能如愿,没办法,现在只好先泡泡水木,了解一下理财的基本知识,再配合一下专业软件来开始我的理财生涯吧。
哼哼,希望能找个人好好监督我一下,免得过了一段时间就忘了。其实主要是决定彻底改变一下以前花钱没有规律的习惯,另外在有可能的情况下做一点投资,还要多利用信用卡啊,以前办了信用卡都没有好好利用过,想起来真是可惜哦,哈哈。