欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]精心打造HSY2之源码制作过程

[原创]精心打造HSY2之源码制作过程

         ============================================================================

    原CM下载地址:

http://bbs.pediy.com/thread-216760.htm

此CM自发布已满两周,也许菜鸟畏难,大牛不屑,至今无人破解。那就到此为止吧,今天公布答案了。

============================================================================

前言:

异常为主,异或为辅。

我放出CM的时候其实已经有提示了。本CM精心将C++不同的异常处理机制引入,“异常”、“异或”是本期CM的主题(所有的加密全是简单异或)。其实取这个名字已经与前一个CM有联系了。前一个CM叫喝啥哟,是李小璐的广告,这一次其实也是她的广告:特种兵生榨椰子汁。只不过引用了三句广告语:

阳光活力原生态

新鲜健康有生机

特种兵生榨椰子汁

这是此CMKEY-FILE文件的原始串,但不是其内容(内容若直接是明文岂不是太小儿科了?话说本人做CM后也用字串参考搜索了来着,若是能找到,再从源码上进行处理,直到找不到为止。)。制作此CM又是一个从逆向者角度出发的异类思路。首先,窗口中放着文本框,旁边有按钮。一般人第一反应就是从文本框、按钮突破,嘿嘿,如果你也是这么想的,那么,恭喜你!你从第一步起就已经落入圈套了。

设计思想:

一、异常流是此CM的主要塔防点。分为两种不同的异常处理方式,一是__try __exceptC++ SEH方式,另一种是传统的C++ try catch方式。对于假码的验证,全部采用try catch方式。而真码的验证全部采用__try __except方式,

外加一个顶级的SetUnhandledExceptionFilter大佬坐台验证。

     二、真码、假码的验证分别由两个不同的类来进行处理。(你遇到的基本都是一个精心设计的类处理。)先说假码:

1、文本框、按钮点击为假码验证。这里的假码设定为:“康师傅蜂蜜柚子茶”。有一个专门的欺骗类:CTricky姐姐,她是专门设计来对付落入圈套的逆向者们的,是不是对你们服务很周到呢?假码的验证就是和你们玩,无论正确与否,最后都是没有结果的。

     2、复制文本,点击按钮的那一刻起,CTricky姐姐就等着招待各位掉圈套的小羊们了,CTricy姐姐:我很善良的,跟我来吧,我给你好吃的哦~


第一部分的SendMessage其实可以去掉,因为这里反而暴露了卧底“内联Hook”兄,它是负责拦截MessageBox。但为了降低点难度,已经故意露出破绽了。若被内联拦截了,此MessageBox是不会显示的:

 

3、再验证第二部分“蜂蜜柚子茶”,不通过无响应。通过了,就假装要显示“成功,你太厉害了”的提示框。但这个提示框是不会弹出来的,因为在第二部分开始的地方就已经对MessageBox进行了拦截,忽略弹框消息。当你费尽千辛万苦来到这里的时候,是不是有种骂人的冲动:尼玛,前面没路了!


三、再来说真码的验证流程。前面的CTricky姐姐是逗你们玩的,真码的验证也有一个专门的验证类:CTZB(特种兵)。嘿嘿,这个类名字就是部分答案!

1、当你们绞尽脑汁和Ticky姐姐玩的时候,其实正直的CTZB兄弟正一直默默地履行他的职责:迎接真正的实力派老大的到来呢。

大家看到注释了吧,本人已经非常仁慈地让CTZB兄一直等待有心人的出现了,否则,若是再加上限时处理,只能在30秒内处理。超过时间了就算你处理正确,也不会弹出成功消息滴!是不是很邪恶?!

2、当IsReady通过之后,就可以进行真码验证了。IsReady是什么呢?

3、真码验证的第一步,当然也不是那么容易啦。设置了“访问异常”等待您的解决:


只有进入异常,才会知道解密KEY是什么,这里第一部分就是0xCC

4、真码验证证的第二部分。嘿嘿,这里就是SEH的升级,嵌套SEH了。(谢谢大家,承让,承让!)这里将产生“除0异常”:

同样,这里必须要走近异常,才能发现解密KEY。(来嘛,别怕~:)

5、真码验证的第三部分:顶级异常。嘿嘿,我就爱这么叫他。他负责处理第三部分验证,这里的异常将会是“int 3异常”了:



四、其他精心挖制的坑

1、在进程实例初始化时,对user32.dll模块断链。这样OD里面就不能直接bp GetWindowTextWMessageBoxW等函数了。当然也有点副作用,就是无法输入文字了。真是杀敌三千,自损七百!不过此CM本就不是要让你输入文字,如果你非要粘贴,那只好让CTricky姐姐陪你玩咯!哦,对了,还有文本框和按钮都是放那陪你们玩的。

2、对TLS函数和OEP进行SMC处理。即TLS进行自身和OEP的解码。这在前一个CM里也有用到,不过这里没有特意抹除TLS的痕迹,在IDA里也能直接看到,算是极大降低此CM的难度了。

五、HSY2的孪生姐妹:对HSY2OEPTLS的加密处理都是来自HSY2,而且是同一工程。它们由__TRICKY_USE_SMC宏的预定义来控制:

结束语:

不走寻常路,让软件的表现闪亮。闪亮的不是算法(算法全是简单异或处理,没有难度),而是思想(CTRICKY:嗯,其实我并不坏!)。逆向本来就是思想的对抗,让大部分定势思维的逆向者们被困在陷阱里正是软件设计者们喜闻乐见滴!

设计此CM的目的主要是让大家熟悉C++不同的异常处理机制。当然若你有强悍的直觉,也可以直接在后继代码上下断,因为此CM引发异常后基本又会继续从后面继续执行。最大的难度在于敏锐的观察力及灵活的思维。即:不走寻常路之找到CTZB兄弟。(CTZB555~,真不容易啊,等了好久你终于想到我了!)

附上HSY2KEY-FILE

 

文件名:drk

文件内容(广告语的utf8编码异或加密后的HEX字串,不分大小写):

25547F2949452A78772946572942532B58532A4C4D

BECEE8B1EAC4BDD9FDBDE2EFBEC4D1BFCCC7BEC4E2

92FCCC92D2F890F0C092E1EA93D3DD93D1C590D8E593C4F4

成功截图(不是做广告,本人喜欢用这三句就用,就这么任性。):

附上CM源码,向被本CM困住的同学表示歉意。(你被困住,但你也因此学到了知识。你是幸运的!)本CMVS2015编译,需要boost1.62库。祝大家玩得开心!J

上传的附件 HSY2_Source.rar

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功