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的下面,从这里开始是存放程序集和全局变量的地方,要一个一个找了,比较费劲。
页: 1 [2] 3 4 5
查看完整版本: 不借用E盾任何特征码,从源头秒杀(貌似无视VMP)