朋友给了个某工程软件样本求助,是Sential Ldk加密的.net程序。经过处理逆向完成,整理了一下这个加密狗的特征做个分享。
这个加密程序的逆向比较有意思,网上资料非常少,论坛这里也有人之前发过样本(旧贴链接),这个帖子可算是揭榜。
老账号丢了,也收不到重置密码的邮件(163邮箱),只好启用了这个买书送的账号。
不知道这个例子算脱壳还是算逆向,似乎更靠近逆向一样。
一:背景
Sential Ldk软加密狗特征:
1、安装以后,服务里面,增加了Sential LDK的自启动服务,必须保证服务启动才能启动软件。
2、exe同文件夹下,有hasp_rt.exe以及hasp_windows.XXXXX.dll等hasp配套的dll和exe文件。(最初在这花费了很多时间去静态分析,后来发现没有必要)
考虑到样本工程太大,于是去下载了Sential Ldk suite 7.10,写了一个Helloworld demo进行加密,再加密处理。
Demo如图

处理以后没拿到安装证书运行和关闭ldk服务运行


加证书和开启服务以后

使用的时候,先本机运行Sentinel_LDK_Run-time_setup的客户端,收集客户C2V证书。拿客户端证书进行服务器端签名后,得到一个V2C的证书。本地运行程序加载证书以后,就可以运行程序了。
以上demo样本获得以及使用过程步骤可以参考官方文档。
PS:Sential LDK的服务可以视为加密狗的驱动程序,而V2C证书,可视为软狗。启动和停止Sential LDK的服务就可以创造带狗和无狗的环境。
考虑到C2V证书和下V2C证书都是经过AES多次加密的结果,故没有考虑从这里突破。而是考虑直接在能够运行(带狗)的情况下把能够运行的程序dump出来。
二:运行过程分析
使用de4dot可以反混淆加密的exe,得到相对清晰的源代码。再用dnspy可以调试。
经过分析,原exe文件里面多添加了左边这些类

每一个可以运行的方法代码变为

几乎所有的方法实体被替换为了这种形式。
从一个熟悉的IL代码操作方法找到了突破口 
这个方法是从byte字节流数组里面读取一个int32的。

这个是msdn里面利用DynamicILInfo类动态生成方法中的PutInteger4。可以参见微软msdnDynamicMethodandTypeBuilder.DefineMethod
这种加密方式是混淆和替换了方法的实体,类似于ilProtector,运行时再动态取出并通过LDK服务解密构建出实际运行的动态方法。(所以IDA和X64dbg分析工作量很大,反复在壳里面绕,想通过静态分析并爆破工作量巨大,实际上最后的逆向过程也不需要使用IDA和X64dbg。)。
既然它的加密方式是通用的,解密流程是类似的,我们只需要理顺method与method IL代码之间的对应关系就行了。
运行过程
(1) 先处理文件校验的过程,直接修改代码指向对的文件就可以避开这个检查,内部不深究了。

(2)读取存储在PE文件的.protect嵌入文件中的IL实体代码(经过加密处理)

(3)将加密过的代码交给LDKSerice进行解密,
调用 hasp_windows_XXXX.dll与本地服务的1947端口进行数据通信。这样的通信方法共有十来个,为hasp_update,hasp_dispatch_XXX,图中的三个是不同平台下的

类似的调取服务过程基本都是开放全局内存地址给dll写入,之后再读取相应内容。例如跟踪了一个hasp_update方法,是传入一个xml的模板,之后传回来就是已经写好的字符串。
(4) 构建动态方法

以方法的metadatatoken为键值,储存在缓存中

至此软件与狗的互动过程全部结束。剩下需要做的事情就是把动态方法存储起来并二次反编译。论坛有贴详说了这个过程,就不赘述了。
使用软件:dnspy,de4dot
参考资料
1、2c8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3P5X3S2Q4x3X3c8U0L8W2)9J5c8X3q4J5j5$3S2A6N6X3g2Q4x3V1k6T1L8r3!0Y4M7#2)9J5c8Y4c8Z5L8%4c8@1j5h3#2K6i4K6u0r3k6s2W2F1j5h3#2A6j5$3#2W2N6r3S2G2k6q4)9J5k6r3q4F1k6q4)9J5k6s2c8&6M7r3g2T1N6h3W2D9k6r3g2J5i4K6u0V1k6r3g2X3K9h3&6W2L8h3g2@1K9r3!0V1
2、636K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8X3c8G2N6r3&6W2N6q4)9J5c8X3q4H3K9g2)9J5c8Y4y4&6M7%4c8W2L8g2)9J5k6i4u0W2k6X3I4W2j5%4c8A6L8$3&6Q4x3X3g2W2L8h3W2@1i4K6u0W2j5i4y4K6k6h3#2T1L8s2W2T1N6h3W2D9k6r3g2J5i4K6y4r3N6X3W2W2N6#2)9K6c8r3&6W2N6r3k6J5j5h3#2W2N6$3!0J5K9#2)9J5k6o6c8Q4x3X3f1^5
3、7afK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3q4U0K9$3!0$3k6i4u0X3L8r3!0%4i4K6u0W2j5$3!0E0i4K6u0r3M7i4g2W2M7%4c8A6L8$3&6K6i4K6u0r3y4o6b7$3x3o6R3#2z5g2)9J5c8X3#2W2N6r3S2G2k6r3u0#2K9h3I4V1k6i4u0Q4x3X3c8U0M7X3g2S2N6r3g2E0k6i4c8Z5L8$3c8T1L8$3c8&6i4K6u0V1M7s2u0G2j5X3I4W2L8g2)9J5k6r3W2F1i4K6u0V1k6s2W2F1j5h3#2A6j5#2)9J5k6s2c8&6M7r3g2Q4x3X3c8U0M7X3g2S2N6r3W2G2L8R3`.`.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-6-9 20:39
被阿腊婆编辑
,原因: 增加说明