使用软件
dnSpy
过程
根据经验,验证过程在主程序system3.0中
成功找到算法位置,但是全文使用代码混淆,分析较困难,使用de4dot反混淆失败,应该使用了最新的代码混淆工具
算法位置:System3.0(程序) –> PRyNfW6mjuaTGj2S0j(命名空间) –> string x18ZyIKtY(int 形参)(方法)
算法逆向较难,查找调用位置
发现systemFrame.dll猜测为程序GUI框架
打开发现未混淆
找到注册界面框架SystemFrame.dll –> SystemFrame.Frame –> RegisterFrame(注册界面) –> btnSubmit-Click(注册按钮)
|
|
- 15-37 网络验证
- 39-65 离线密匙验证
- 观察到对话框资源里有B_kaixin(开心) B_wuyu(无语) B_weiqu(委屈),很直白kaixin是注册成功、无语应该是瞎填注册码、委屈应该是软件问题的错误
- 屏蔽网络验证,跳过15-37
- 始终验证成功修改switch判断只跳成功
- 切换IL语言
- 123/* 0x0000D6E6 3AD1000000 */ IL_0036: brtrue IL_010C/*修改为*//* 0x0000D6C4 3A01000000 */ IL_0014: brtrue IL_0208
修改后代码为
123456789101112131415161718192021222324252627282930313233343536// SystemFrame.Frame.RegisterFrame// Token: 0x060000E3 RID: 227 RVA: 0x000115C8 File Offset: 0x0000F7C8[MethodImpl(MethodImplOptions.NoInlining)]private void btnSubmit_Click(object sender, EventArgs e){while (false){object arg_0A_0 = null[0];}if (!this.CheckTextBox()){return;}base.Close();this.isOk = true;SqliteHelper.set_ConStr(AppDomain.CurrentDomain.BaseDirectory + x2e4SAFyXo7xT4t2H1.x18ZyIKtY(818) + Parameters.CurrentCourse.Sign + x2e4SAFyXo7xT4t2H1.x18ZyIKtY(832));JFT_Class jFT_Class = new JFT_Class();JFT_Class model = jFT_Class.GetModel();model.set_SN(this.tbSN.Text);model.set_ClassType(StringTest.DesEncrypt(Parameters.HMAC + this.tbSN.Text + Parameters.CurrentCourse.Sign));jFT_Class.UpdateClass(model);if (new CreateTables().CreateDataSource()){JFT_Account jFT_Account = new JFT_Account();jFT_Account.set_Email(this.tbUser.Text);jFT_Account.set_PassWord(this.tbPass.Text);jFT_Account.set_AddTime(DateTime.Now.ToString(x2e4SAFyXo7xT4t2H1.x18ZyIKtY(6422)));jFT_Account.set_Province(((ProviceModel)this.comboBox1.SelectedItem).id.ToString());new JFT_Account().Insert(jFT_Account);}new TipsOK(x2e4SAFyXo7xT4t2H1.x18ZyIKtY(7106), x2e4SAFyXo7xT4t2H1.x18ZyIKtY(7366)){SetIco = Resources.B_kaixin}.ShowDialog();SqliteHelper.set_ConStr(AppDomain.CurrentDomain.BaseDirectory + x2e4SAFyXo7xT4t2H1.x18ZyIKtY(818) + Parameters.CurrentCourse.Sign + x2e4SAFyXo7xT4t2H1.x18ZyIKtY(832));}已无网络验证,直接执行注册成功对话框
以上也可以分析出,只要执行SqliteHelper.set_ConStr(AppDomain.CurrentDomain.BaseDirectory + x2e4SAFyXo7xT4t2H1.x18ZyIKtY(818) + Parameters.CurrentCourse.Sign + x2e4SAFyXo7xT4t2H1.x18ZyIKtY(832));即可完成注册,主要是屏蔽网络验证!
结束语
某人明明书后有激活码和软件下载地址都不知道看下......