吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1749|回复: 12
收起左侧

[求助] 一段VB反编译后的代码,现在看不懂验证公式!求指点!

  [复制链接]
srygg 发表于 2025-4-4 22:29
本帖最后由 srygg 于 2025-4-6 21:03 编辑

反编译了一个VB编写的程序,其中有一段代码是验证码的校验。因为反编译后的代码和实际编程时的代码有区别,求懂的高手指点一下,这段验证代码的计算方法。
软件运行后的用户ID是:F9F08-888FC-FAFF9-103
是不是注册码和"134245656756", "77896129807896"这两个参数运算后如果结果是“12567ABCDEF”就代表注册码是正确的?

[Visual Basic] 纯文本查看 复制代码
Dim var_150 As Variant
  loc_0041660A: var_150 = var_29C
  loc_00416642: var_154 = Registry.PropBag.WriteProperty("HKEY_LOCAL_MACHINE", global_0042306C, var_144)
  loc_004166B0: global_52 = Proc_4_6_41FAF0("134245656756", "77896129807896", Me)
  loc_004166DD: var_3C = GetTickCount(0)
  loc_0041671D: var_50 = FormMain.TextSN.Text
  loc_00416725: var_154 = var_50
  loc_004167B2: global_00423074 = Trim(var_50)
  loc_00416806: var_2C = Replace(global_00423070, "-", global_004
06734, 1, -1, 0)
  loc_004168F5: If (Proc_1_1_41ABA0(Left(var_2C, Len(var_2C)(-2)), 0, 0) <> Right(var_2C, 2)) Then
  loc_00416904:   On Error Resume Next
  loc_0041697F:   var_803C = Proc_4_10_4219D0(P
roc_4_6_41FAF0(Proc_4_9_4210E0(Replace(global_
0423070, "-", "EA", 1, -1, 0), -1, fs:[00000000h]), "12345678", ), , )
  loc_00416AA0:   var_805C = Proc_4_3_41F300(Proc_4_11_421D60(Proc_4_6_41FAF0(Proc_4_9_4210E0(var_803C & "12567ABCDEF", , ), CStr(45389077), ), 19, 0), Proc_4_6_41FAF0(global_00423074, CStr(1911)))
  loc_00416AC8:   If var_805C Then
  loc_00416B47:     var_58 = Proc_4_6_41FAF0(global_00423074, "12345678")
  loc_00416B55:     var_54 = "SN"
  loc_00416B63:     var_50 = "HKEY_LOCAL_MACHINE"
  loc_00416B90:     Registry.var_50 = Forms
  loc_00416B95:     var_154 = var_2A8
  loc_00416C10:     var_150 = FormMain.TextSN
  loc_00416C2A:     var_150.Text = "注册成功,请重新启动程序。"
  loc_00416C32:     var_154 = var_150
  loc_00416C7D:   End If
  loc_00416C86:   On Error GoTo 0


重新整理一下思路,还是用OD入手,看看能不能整出个结果。
用OD打开程序后,用中文搜索引擎查找关键字。
验证结果.png

一开始以为如此简单,直接跳转到这里就OK了,没想到没戏。初一看是注册成功了,实际读取密码时还是只显示前两位,和没注册前是一样的情况。
结果是在这里,那么从这段子程序的开始跑一下代码,看看能不能追到码。
参考其它贴子,这个了程序的开始处会有一个代码 push epb。那么往上翻一下,找一下。代码比较多,看得眼花缭乱,对OD的使用还是不太熟悉,有没有快捷的方法能找到最近的PUSH EPB呢?
用个笨办法,用VB Decompiler反编译程序,参考看一下验证注册码这段程序开始的位置。

2.png
再看OD里的代码,00416570找到验证注册码这个子程序的入口。
3.png
为什么是这个地方呢,我也是参考其它贴子里看来的。百度了一下,是这个原因,不知道理解对不对。
4.png

按F2,在这里下个断点。
5.png

再按F9运行程序,因为不知道正确的注册码是什么格式,先输入一串数字“1234567890”
6.png

再点注册,这行变灰了,程序停在了断点处。
7.png

再按F8开始单步执行。
在运行这个位置时,寄存器EAX出现了一长串的数字"10457217104811626634545376"

8.png

9.png

那么这串数字代表什么意思呢?
在之前的反编译后的代码里有这样两个数字
[Visual Basic] 纯文本查看 复制代码
loc_004166B0: global_52 = Proc_4_6_41FAF0("134245656756", "77896129807896", Me)

上面的结果正好是这两个数相乘的结果。
续按F2单步运行下去,在这个位置读取到了之前随便输入的注册码“1234567890”
10.png
11.png

继续往下走,到这一步时读取了机器码
21.png

22.png
这一步把机器码里“-”去除了
23.png
24.png
到这里出现了一个转折点,如果跳转出去的话就到不了验证成功这一步,所以在这里把Z的值改0,让程序不跳转
25.png
26.png
又到了一个转折点,还是修改Z的值为0,不让程序跳转
31.png

32.png
在修改了上面两个跳转点的指令后,随便输入一个注册码,出现注册成功的提示,要求重启软件,但是重启后还是显示未注册。
注册成功但还是显示未注册版.png
搞得头大!










发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

许我浅笑而安 发表于 2025-4-5 03:36
不是的
[Visual Basic] 纯文本查看 复制代码
loc_0041697F:   var_803C = Proc_4_10_4219D0(Proc_4_6_41FAF0(Proc_4_9_4210E0(Replace(global_00423070, "-", "EA", 1, -1, 0), -1, fs:[00000000h]), "12345678", ), , )

这行的意思是global_00423070 中的所有 "-" 字符会被替换成 "EA"。Proc_4_9_4210E0(...)函数调用会接收上面替换后的字符串 global_00423070,并传入 -1 和 fs:[00000000h] 作为额外的参数。Proc_4_6_41FAF0(...)接受 Proc_4_9_4210E0 的输出和 "12345678" 作为参数。Proc_4_10_4219D0(...)函数调用会接受 Proc_4_6_41FAF0 的结果作为输入,进行更进一步的处理,并将最终结果赋值给 var_803C。
[Visual Basic] 纯文本查看 复制代码
loc_00416AA0:   var_805C = Proc_4_3_41F300(Proc_4_11_421D60(Proc_4_6_41FAF0(Proc_4_9_4210E0(var_803C & "12567ABCDEF", , ), CStr(45389077), ), 19, 0), Proc_4_6_41FAF0(global_00423074, CStr(1911)))

这行的意思是将 var_803C 和字符串 "12567ABCDEF" 拼接在一起,形成一个新的字符串。Proc_4_9_4210E0(...)函数对拼接后的字符串进行处理,并且使用 CStr(45389077) 作为额外参数。Proc_4_6_41FAF0(...)函数再次被调用,处理 Proc_4_9_4210E0 的结果。Proc_4_11_421D60(...)函数进一步处理 Proc_4_6_41FAF0 的结果,Proc_4_3_41F300 函数将会处理 Proc_4_11_421D60 的输出,并且将结果赋值给 var_805C.
 楼主| srygg 发表于 2025-4-5 17:38
醉生梦死. 发表于 2025-4-5 17:13
可否提供一组正确的注册信息用来参考。这个算法挺复杂的。

目前没有正确的注册信息啊!
刚开始用OD打开软件时以为会很简单,在下面的位置跳转一下就可以了。
[Asm] 纯文本查看 复制代码
中文搜索引擎, item 273
 地址=0041879D
 反汇编=push S7-200Ke.00408228
 文本字符串=请输入正确的注册码!

[Asm] 纯文本查看 复制代码
中文搜索引擎, item 274
 地址=00418838
 反汇编=push S7-200Ke.00408244
 文本字符串=注册成功。


实际是跳转后注册的界面是没有了,但是运行时还是读取不了正确的密码。
然后发现程序有一段校验程序,应该是程序被修改后,校验值不对了,所以不会正确执行。
[Asm] 纯文本查看 复制代码
中文搜索引擎, item 311
 地址=0041A46C
 反汇编=push S7-200Ke.00408304
 文本字符串=CheckNum is OK!
中文搜索引擎, item 312
 地址=0041A492
 反汇编=push S7-200Ke.00408328
 文本字符串=CheckNum is not OK!


在这个地方跳转也不行。
所以才想着是不是能找到算法,算出注册码。
用VB Decompiler 反编译程序后又感觉有希望了,程序的结构一目了然。CmdReg_Click_416570就是验证注册码的程序。没想到反编译出来的程序和原来编程时的指令是有点区别的。
image.png

爱飞的猫 发表于 2025-4-5 01:12
[Visual Basic] 纯文本查看 复制代码
  loc_00416AC8:   If var_805C Then
  ...
  loc_00416C2A:     var_150.Text = "注册成功,请重新启动程序。"
  loc_00416C7D:   End If


说明 var_805C 的值需等于 true;即 Proc_4_3_41F300 的结果为 true。

进入这个分支还有一个条件:

[Visual Basic] 纯文本查看 复制代码
  loc_004168F5: If (Proc_1_1_41ABA0(Left(var_2C, Len(var_2C)(-2)), 0, 0) <> Right(var_2C, 2)) Then


也就是 Proc_1_1_41ABA0 的运算结果也需要为 true。

这几个函数是干什么的,你也需要分析。
醉生梦死. 发表于 2025-4-5 09:16
软件发上来瞧瞧。局部代码分析不出什么的
vb56390 发表于 2025-4-5 09:31
发原始exe文件看看
 楼主| srygg 发表于 2025-4-5 11:08
本帖最后由 srygg 于 2025-4-5 14:25 编辑
许我浅笑而安 发表于 2025-4-5 03:36
不是的[mw_shl_code=vb,true]loc_0041697F:   var_803C = Proc_4_10_4219D0(Proc_4_6_41FAF0(Proc_4_9_4210 ...

原文件在这儿,谢谢指点!
现在通过跳转的办法行不通,应该还有其他验证,所以想看看能不能找到算法。

https://wwmq.lanzouu.com/izHy12sr78yh


 楼主| srygg 发表于 2025-4-5 11:13
本帖最后由 srygg 于 2025-4-5 14:26 编辑
vb56390 发表于 2025-4-5 09:31
发原始exe文件看看

原文件在这儿,谢谢指点!
现在通过跳转的办法行不通,应该还有其他验证,所以想看看能不能找到算法。

https://wwmq.lanzouu.com/izHy12sr78yh
 楼主| srygg 发表于 2025-4-5 11:15
本帖最后由 srygg 于 2025-4-5 14:26 编辑
醉生梦死. 发表于 2025-4-5 09:16
软件发上来瞧瞧。局部代码分析不出什么的

原文件在这儿,谢谢指点!
现在通过跳转的办法行不通,应该还有其他验证,所以想看看能不能找到算法。

https://wwmq.lanzouu.com/izHy12sr78yh
Smallhorse 发表于 2025-4-5 13:49
无法运行,报错,没法看
 楼主| srygg 发表于 2025-4-5 14:27
Smallhorse 发表于 2025-4-5 13:49
无法运行,报错,没法看

请教一下是什么报错?
源程序在这儿,我这儿是能正常运行的。
https://wwmq.lanzouu.com/izHy12sr78yh
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-3-17 13:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表