最近闲来无事,因此认真分析了一下sourceinsight这个软件,希望和广大网友一起探讨讨论

一、sourceinsight3.0

没有地址随机化(ASLR)

反静态调试:

目测有反静态分析的工具

 

 

在43A105处,分析函数调用异常,43A105内部不存在栈不平衡的现象(入栈前和出栈前要保证堆栈平衡)

其实想绕过这个反静态调试,可以直接把难以分析调用函数的call指令转为强跳转或者改为nop即可,然后即可反编译

反反汇编也能解决,但是可以直接动调:

第一组数很容易看

第二组数要求是6位数:

第三组数:

单纯看汇编我没有跟进那个计算函数,直接看的结果,其实就是将输入的第三组数变为整型(16进制),然后和系统根据第二组数计算的第三组数的结果相比

输入:SI3US-123456-9999

可以看到最后cmp esi,eax的比较

因此如果第二组数输入123456,则第三组数输入92379应该就可以,尝试一下:

具体的计算函数:可以回头写注册机用

二、sourceinsight3.5,其实也是和3.0一样,具有反反编译功能

没有地址随机化(ASLR)

反静态调试:

目测有反静态分析的工具

动调+ida结合

和3000不同的地方是,3000整个验证过程都写在主函数里,3500是封装到最后的一个函数内,反而便于我们直接F5分析了,因为3000验证过程写在主函数里,又因为其反反编译的缘故,我们不便于分析序列号,但是3000虽然主函数不能直接F5,但是其验证过程封装在子函数内,子函数可以直接F5,神不神奇

首先在主函数里找到他封装的验证函数位置:

然后跟进,这个地方有点意思,很多逆向的思路,看他是否匹配ES3US,所以以我们正常的思维,按理说应该让他匹配,但其实这个地方,不应该让他匹配,因为第一组数应该是SI3US,其实这个在输入序列号的时候,已经提示了第一组数是SI3US,真是太搞笑了

因此我们应该跟进449B2C函数

贼坑的地方,第二组序列号他会有过滤机制,比如123456对应的整型:1E240就会被过滤,一开始搞得我不行,但是输入一些不常见的,那个循环判断就能过掉了,所以说平时一开始验证序列号,别拿123456这种,很容易就被过滤掉了

其实sub_4F521E是计算函数,可以写注册机的地方。整个思路就是:拿最后一组数变为整型,然后拿第二组数经过一个计算,和最后一组数比较,然后判定。

输入:SI3US-990831-xxxxx  

拿OD看一下:

拿最后一组数11111的整型和计算的结果比较,可以看到结果是00011064,即为:69732

得到一组序列号:SI3US-990831-69732,验证一下:

还有贼坑的地方:

我们到449A4E里面看一下,传参的v5,进去之后其实是a2,这个函数里面的v5不是真正的那个v5,佩服写代码的老哥

拿来写注册机的函数:4F521E

三、sourceinsight4.0

首先先查壳,没有壳

之后先使用一下,捕捉关键语句:the serial number you entered is not correct

直接扔到ida里,准备搜索关键字符串,然后定位

一键F5

从上面的代码可以看出来序列号结构:

SXXX-XXXX-XXXX-XXXX

第一组第二个数必须是数字

S(0-9)(T/B/S/U)X-X(R/G/D/F)XX-XXXX-XXXX

为了能返回result=1,我们需要跟进sub_445DD0函数内,看一下怎么保证这个函数能够返回数值0

然后我们继续跟进sub_444820

因此能够得出:

每组第一位必须是字符,这样可以保证直接过掉

sub_445D00过掉之后,我们继续看,最后一组数根据前三组计算得到

sub_50A560是根据前三组数计算最后一组数的函数,然后判断是否相等,因此要保证相等,就跟进sub_50A560函数看,然后根据综上的分析,可以编写注册机

不编写注册机,根据前几位的特征,我们可以直接用OD拿出来看最后一组数

先来一组个人用例,然后在OD里跟调

得到最后四位YZJU,然后重载source insight看,成功绕过

四、sourceinsight最新版

和sourceinsight4版本,主要区别是对于每组数首字节的判断

因为原来的版本,sub_445DD0函数的意义不大(开发者自己的问题?逗乐了)

目测对于sourceinsight4105版本,不用限制首字符是字母,可以拿OD跟踪尝试一下

我们测试序列号:

S4SV-UFWT-ZPRA-1111

一样,可以拿出最后一组数的结果,S4SV

对于注册机的编写,两版程序相同

 

这就是以上四个版本我的分析过程,可以说收获很多,也希望网友们能一起探讨讨论!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐