sxdx1372
发表于 2018-4-25 22:22
如果时钟移除不掉的话,可以在这里下个断点8B 44 24 0C 56 8B30 56(倒数第二个)F9,查看堆栈。
从按钮事件到登录call里面有4层堆栈,我们只需要3层就可以了,也可以在第4层堆栈找返回地址修改,第4层自己可以编译源码查看。
堆栈:相同颜色内的是同一层堆栈,每层栈顶下的地址就是该CALL的返回地址
0012F414 0012F43C
0012F418 014D90A0E盾个人014D90A0 第三层CALL返回地址 (就是登录特征码CALL)
0012F41C 011E9BF8E盾个人011E9BF8
0012F420 00000001
0012F424 0012F468
0012F428 00000001
0012F42C 00000000
0012F430 00000000
0012F434 006BA1D4E盾个人006BA1D4
0012F438 00000000
0012F43C 0012F470
0012F440 01370D7AE盾个人01370D7A 第二层CALL返回地址源码里面-验证_用户登录()CALL
0012F444 011E9BF8E盾个人011E9BF8
0012F448 00000001
0012F44C 0012F468
0012F450 00000001
0012F454 01ECFC10
0012F458 FFFFFFFF
0012F45C 00000006
0012F460 02D99198ASCII "111111" 这里输入的卡号或密码
0012F464 00000000 这里是输入的账号
0012F468 00000000
0012F46C 00000000
0012F470 0012F4A4
0012F474 012E5B84E盾个人012E5B84 第一层CALL返回地址(按钮事件CALL的返回地址)
0012F478 01ECFC10
0012F47C 011F63F8E盾个人011F63F8
0012F480 01ECFC10
0012F484 011F63F8E盾个人011F63F8
0012F488 00000001
0012F48C 011F63F8E盾个人011F63F8
0012F490 FFFFFFFF
0012F494 0012F71C
0012F498 77D2BC90返回到 user32.77D2BC90 来自 gdi32.TextOutW
0012F49C 6B01015E
0012F4A0 005244EBE盾个人005244EB 这个地址是进按钮事件CALL的地址
0012F4A4 000007D8 这里貌似都是这个值,反正E盾是的
我们在第3层堆栈返回地址下断修改就可以了
mov eax,0x1
mov esp,ebp
pop ebp
retn
1163633837
发表于 2018-4-26 00:53
大佬我试了一下。。。登陆返回感觉没看懂能不能录个视频。。。
da1993
发表于 2018-4-26 01:08
能不能录个视频。。。
xiaosi
发表于 2018-4-26 20:50
强烈支持大佬,虽然看不懂
TZEEUQ
发表于 2018-5-4 21:53
收藏了感谢楼主
抒情gg
发表于 2018-5-4 23:13
狐白小刺客 发表于 2018-4-25 20:24
核心库是不能被VM的vm只能vmJMP []的
一旦VM 易语言调用时间会延迟 直接出错的
我插件的基本原理也是 ...
怕是你没见过E盾的VM优化器吧
轮回v
发表于 2018-5-31 16:10
{:5_188:}利用位异或调用易语言核心支持库来给本地运算结果置0因为连接不到服务器所以服务器运算返回的就是0 这样就可以直接过掉所有运算。。楼主思路不错。如果有软件开发者想防止这种通杀方法的话可以在运算完服务器结果的时候加一句下面的代码这样服务器运算结果就永远不会为0了 如果没有运算成功会卡死在这里。。。
.版本 2
.判断循环首 (服务器运算结果 = 0)
置入代码 ({ 81, 82, 15, 49, 185, 23, 0, 0, 0, 247, 225, 131, 192, 7, 185, 0, 16, 0, 0, 131, 233, 16, 65, 51, 210, 247, 241, 129, 194, 0, 16, 0, 0, 139, 194, 90, 89, 137, 69, 252, 144, 144, 81, 82, 15, 49, 185, 23, 0, 0, 0, 247, 225, 131, 192, 7, 185, 0, 16, 0, 0, 131, 233, 16, 65, 51, 210, 247, 241, 129, 194, 0, 16, 0, 0, 139, 194, 90, 89, 137, 69, 248, 144, 144, 81, 82, 15, 49, 185, 23, 0, 0, 0, 247, 225, 131, 192, 7, 185, 0, 16, 0, 0, 131, 233, 16, 65, 51, 210, 247, 241, 129, 194, 0, 16, 0, 0, 139, 194, 90, 89, 137, 69, 244, 144, 144, 81, 82, 15, 49, 185, 23, 0, 0, 0, 247, 225, 131, 192, 7, 185, 0, 16, 0, 0, 131, 233, 16, 65, 51, 210, 247, 241, 129, 194, 0, 16, 0, 0, 139, 194, 90, 89, 137, 69, 240 })
服务器运算结果 = 到数值 (验证_调用远程JS (“登录成功运算,” + 到文本 (a) + “,” + 到文本 (b) + “,” + 到文本 (c) + “,” + 到文本 (d)))
.判断循环尾 ()
sxdx1372
发表于 2018-5-31 17:21
轮回v 发表于 2018-5-31 16:10
利用位异或调用易语言核心支持库来给本地运算结果置0因为连接不到服务器所以服务器运算返回的就是 ...
这里没有讲怎么更改这个服务器计算返回的文本结果,其实可以通过这个 验证_调用远程JS 这个子程序源码来定位修改返回值,在通过到数值特征来修改双精度浮点型数值,在判断本地结果和服务器结果的时候可以在上面修改的地址下个硬件断点,再在堆栈找到这2个变量的地址,这里就可以补正版数据。
轮回v
发表于 2018-5-31 18:30
sxdx1372 发表于 2018-5-31 17:21
这里没有讲怎么更改这个服务器计算返回的文本结果,其实可以通过这个 验证_调用远程JS 这个子程序源码来 ...
{:5_187:}只是针对你所说的补充了一下,思路确实眼前一亮。我之前以为0当做被除数会出错,所以我之前一直用的方法是在运算之前保存四个变量 这时候他的返回值就是固定的了。JS返回一个固定的返回值。第一个过了以后也是楼主的这个位异或补回之前的四个变量的值。。。不过比你这种方法麻烦很多,补丁源码写出来每次打都是煎熬{:5_186:}
sxdx1372
发表于 2018-5-31 18:46
轮回v 发表于 2018-5-31 18:30
只是针对你所说的补充了一下,思路确实眼前一亮。我之前以为0当做被除数会出错,所以我之前一直用 ...
还一个重要的就是源码里面的本地结果是程序集变量,服务器运算结果是局部变量,程序集变量在堆栈中是找不到的,服务器结果倒是可以找到,后来通过源码对比,发现程序集变量和全局变量的地址是在这个特征码E0 85 E0 87 E0 89 E0 8B E0 86 E0 88 E0 8A E0 8C的下面,从这里开始是存放程序集和全局变量的地方,要一个一个找了,比较费劲。