软件安装包安装界面内容写的很明白,想收律师函吗?
加阅读权限的目的就是避免被搜索引擎捕捉内容
前言
最近从朋友那里拿到了一个加密狗授权的软件安装包,秉承着LCG的精神,开启了逆向之路,,经过查壳和综合分析确定是VB6编写的程序(这年头使用VB6开发商业程序的还真少见),作为一名C# Winform的业余程序员,靠着C#的知识勉强分析个大概.
授权简介
软件共分三种授权模式:
1.账号密码模式:免费,但功能有限制
2.硬盘绑定模式:收费,绑定电脑硬盘ID
3.加密狗模式:插着加密狗就可以使用
经过对程序代码分析,软件是在编译前通过更改内部变量标志位实现不同授权模式,并且编译后只能识别对应的授权模式
所需工具
1.VB Decompiler 11 (爱盘里面下载)
2.文本批量查找工具
源程序
aHR0cHM6Ly93d3cuMTIzcGFuLmNvbS9zL1FMaVJWdi00WHZoaA==
分析过程[由浅入深,正向推进]
分析软件结构
1.安装软件,并打开安装目录
通过编译时间和经验筛选,除软件主程序外,只有
FT_ET299_API.dll
FD181.dll
RCGrandDogW32.dll
三种加密狗的库,具体用的是哪一种,后文会有分析过程
设置VB Decompiler参数
1.这个软件不能在WIN10系统上运行,解析不出来code段代码,我用的是WIN7的虚拟机.
2.打开VB Decompiler,按F11(或者菜单栏工具→选项),设置完成后保存,重启软件
1.png (41.51 KB, 下载次数: 0)
下载附件
2023-9-16 00:48 上传
逆向分析1 验证窗口的来源(正向推进)
1.打开软件,弹出登录界面/验证界面(因为我获得了加密狗版的安装包,所以知道不同的软件界面,这个是后话)
2.记住这个登录界面,我们打开VB Decompiler,导入软件的主程序,并反编译.
3.在树形分支窗口中在forms里面找到刚才的界面(frmlogin)
4.CTRL+S(菜单栏文件→保存反编译的项目),将反编译的内容保存在单独的文件夹里面.
5.使用文本批量查找工具,在刚刚保存的目录下查找"frmlogin"
通过查找定位可找到frmmain.frm和frmzc.frm两个调用了这个登录界面.
6.通过具体跟进代码,发现在frmmain的Form_Load窗体加载事件中调用了这个窗体的显示
NewIfNullPr frmlogin 'Ignore this
frmlogin.Show var_C8, var_D8
通过上下文代码内容得知:
var_98 = "软件启动检测"
var_F6 = 1
If (var_F6 = 1) Then
var_88 = "NET"
Else
If (var_F6 = 2) Then
var_88 = "HDD"
Else
If (var_F6 = 3) Then
var_88 = "DOG"
End If
End If
End If
通过对var_F6的赋值来决定模式,但是经过上下文跟进和实际测试这个只会影响软件各窗口标题内容
7.继续对上下文代码分析
loc_66AB02: var_98 = "软件验证"
loc_66AB0B: Call Proc_42_11_585008(var_B0)
var_98 = "软件验证"
Call Proc_42_11_585008(var_B0)
MemVar_6AF114 = CStr(var_B0)
var_B0 = "" 'Ignore this
If &HFF Then //这个值是那里来的,望VB的程序员帮忙解答一下,这个直接决定软件授权验证窗口的类型(授权模式)
var_D8 = CVar(Me) 'Address
PopAdLdVar 'Ignore this
var_C8 = 1
PopAdLdVar 'Ignore this
NewIfNullPr frmlogin 'Ignore this
frmlogin.Show var_C8, var_D8 //免费版网络验证窗口
Else
If 0 Then
Proc_30_2_56F550(var_B0)
Proc_30_4_56DE7C(var_B0)
var_B0 = "" 'Ignore this
If (MemVar_6AFF20 = vbNullString) Then
NewIfNullPr Me 'Ignore this
var_9C = Me.Global.App
var_B4 = "" 'Ignore this
var_9C = vbNull 'Ignore this
var_B0 = "" 'Ignore this
If (Dir(CVar(App.Path & "\sn.bmp"), 0) vbNullString) Then
PopAdLdVar 'Ignore this
PopAdLdVar 'Ignore this
PopAdLdVar 'Ignore this
PopAdLdVar 'Ignore this
NewIfNullPr Me 'Ignore this
var_9C = Me.Global.App
PopAdLdVar 'Ignore this
NewIfNullPr Me 'Ignore this
Me.Global.LoadPicture CVar(App.Path & "\sn.bmp"), var_C8, var_D8, var_164, var_184
Me.picSn.Picture = var_188
var_B4 = "" 'Ignore this
var_9C = "": var_18C = "" 'Ignore this
var_B0 = "" 'Ignore this
MemVar_6AFF34 = Call Proc_60_5_57F48C(Proc_59_1_58D9AC(Me.picSn), "F1DD7CDB1328DB1E") //modRij对称加密程序处理部分
var_B4 = "" 'Ignore this
var_9C = vbNull 'Ignore this
var_B4 = "" 'Ignore this
var_B0 = "" 'Ignore this
MemVar_6AFF20 = Split(MemVar_6AFF34 & "