TC官方合作论坛

 找回密码
 立即注册
查看: 270|回复: 9

[已解决] 求教一个关于逆推随机数总和的问题

[复制链接]
发表于 2021-1-17 23:53:48 | 显示全部楼层 |阅读模式
本帖最后由 bestkakkoii 于 2021-1-19 20:08 编辑

从某游戏的一个地址中读取到一个32X
此游戏有6个开关

当所有开关关闭时 X == 0

每个开关"""单独"""开启时为:
对战开关 == true, X = 4
聊天开关 == true, X = 8
队伍开关 == true, X = 1
名片开关 == true, X = 16
交易开关 == true, X = 32
家族开关 == true, X = 64

复数开关开启时 X会等于 每个开关 单独开启值 的 和

比如说 对战开 + 队伍开 + 家族开


X就等于 4 + 1 + 64 = 69

现在已经设有6个复选框控键可以控制游戏开关

想加一个循环线程侦测游戏开关的状态

不知道怎么写才能有效率的让他自动根据 X 的值 判断哪几个复选框该打勾哪几个不打勾


下面这6个地址会不停循环侦测,当开关打开就会把值加到00F4C484 也就是 X里面
0046ABF4 - 8A 15 84C4F400  - mov dl,[00F4C484]
0046AC69 - 8A 15 84C4F400  - mov dl,[00F4C484]
0046ACDE - 8A 15 84C4F400  - mov dl,[00F4C484]
0046AD53 - 8A 15 84C4F400  - mov dl,[00F4C484]
0046ADC8 - 8A 15 84C4F400  - mov dl,[00F4C484]
0046AE46 - 8A 15 84C4F400  - mov dl,[00F4C484]



开或关都会经过这个
00501E92 - 66 A3 84C4F400 - mov [00F4C484],ax


打开
0046BCDA - 66 09 05 84C4F400  - or [00F4C484],ax
0046BD0A - 66 09 05 84C4F400  - or [00F4C484],ax
0046BD3A - 66 09 05 84C4F400  - or [00F4C484],ax
0046BD6A - 66 09 05 84C4F400  - or [00F4C484],ax
0046BD9A - 66 09 05 84C4F400  - or [00F4C484],ax
0046BDCA - 66 09 05 84C4F400  - or [00F4C484],ax

关闭
0046BDBF - 66 81 25 84C4F400 BFFF - and word ptr [00F4C484],FFBF
0046BD8F - 66 81 25 84C4F400 DFFF - and word ptr [00F4C484],FFDF
0046BD5F - 66 81 25 84C4F400 EFFF - and word ptr [00F4C484],FFEF
0046BD2F - 66 81 25 84C4F400 FEFF - and word ptr [00F4C484],FFFE
0046BCFF - 66 81 25 84C4F400 F7FF - and word ptr [00F4C484],FFF7
0046BCCF - 66 81 25 84C4F400 FBFF - and word ptr [00F4C484],FFFB

------------------------------------------------------------------------------------------------------
XXX.exe+6BC80 - 8B 44 24 04           - mov eax,[esp+04]
XXX.exe+6BC84 - B9 E0A8CD00           - mov ecx,XXX.exe+8DA8E0 { (0) }
XXX.exe+6BC89 - 50                    - push eax
XXX.exe+6BC8A - E8 D161F9FF           - call XXX.exe+1E60
XXX.exe+6BC8F - 85 C0                 - test eax,eax
XXX.exe+6BC91 - 7C 25                 - jl XXX.exe+6BCB8
XXX.exe+6BC93 - 3B 44 24 0C           - cmp eax,[esp+0C]
XXX.exe+6BC97 - 7D 1F                 - jnl XXX.exe+6BCB8
XXX.exe+6BC99 - 8B 4C 24 08           - mov ecx,[esp+08]
XXX.exe+6BC9D - 51                    - push ecx
XXX.exe+6BC9E - B9 F0A8CD00           - mov ecx,XXX.exe+8DA8F0 { (0) }
XXX.exe+6BCA3 - E8 B861F9FF           - call XXX.exe+1E60
XXX.exe+6BCA8 - 85 C0                 - test eax,eax
XXX.exe+6BCAA - 7C 0C                 - jl XXX.exe+6BCB8
XXX.exe+6BCAC - 3B 44 24 10           - cmp eax,[esp+10]
XXX.exe+6BCB0 - 7D 06                 - jnl XXX.exe+6BCB8
XXX.exe+6BCB2 - B8 01000000           - mov eax,00000001 { 1 }
XXX.exe+6BCB7 - C3                    - ret
XXX.exe+6BCB8 - 33 C0                 - xor eax,eax
XXX.exe+6BCBA - C3                    - ret
XXX.exe+6BCBB - 90                    - nop
XXX.exe+6BCBC - 90                    - nop
XXX.exe+6BCBD - 90                    - nop
XXX.exe+6BCBE - 90                    - nop
XXX.exe+6BCBF - 90                    - nop
XXX.exe+6BCC0 - 8A 0D 84C4F400        - mov cl,[XXX.exe+B4C484] { (68) }
XXX.exe+6BCC6 - B8 04000000           - mov eax,00000004 { 4 }
XXX.exe+6BCCB - 84 C8                 - test al,cl
XXX.exe+6BCCD - 74 0B                 - je XXX.exe+6BCDA
XXX.exe+6BCCF - 66 81 25 84C4F400 FBFF - and word ptr [XXX.exe+B4C484],FFFB { (68),65531 }
XXX.exe+6BCD8 - EB 07                 - jmp XXX.exe+6BCE1
XXX.exe+6BCDA - 66 09 05 84C4F400     - or [XXX.exe+B4C484],ax { (68) }
XXX.exe+6BCE1 - E9 0A020000           - jmp XXX.exe+6BEF0
XXX.exe+6BCE6 - 90                    - nop
XXX.exe+6BCE7 - 90                    - nop
XXX.exe+6BCE8 - 90                    - nop
XXX.exe+6BCE9 - 90                    - nop
XXX.exe+6BCEA - 90                    - nop
XXX.exe+6BCEB - 90                    - nop
XXX.exe+6BCEC - 90                    - nop
XXX.exe+6BCED - 90                    - nop
XXX.exe+6BCEE - 90                    - nop
XXX.exe+6BCEF - 90                    - nop
XXX.exe+6BCF0 - 8A 0D 84C4F400        - mov cl,[XXX.exe+B4C484] { (68) }
XXX.exe+6BCF6 - B8 08000000           - mov eax,00000008 { 8 }
XXX.exe+6BCFB - 84 C8                 - test al,cl
XXX.exe+6BCFD - 74 0B                 - je XXX.exe+6BD0A
XXX.exe+6BCFF - 66 81 25 84C4F400 F7FF - and word ptr [XXX.exe+B4C484],FFF7 { (68),65527 }
XXX.exe+6BD08 - EB 07                 - jmp XXX.exe+6BD11
XXX.exe+6BD0A - 66 09 05 84C4F400     - or [XXX.exe+B4C484],ax { (68) }
XXX.exe+6BD11 - E9 DA010000           - jmp XXX.exe+6BEF0
XXX.exe+6BD16 - 90                    - nop
XXX.exe+6BD17 - 90                    - nop
XXX.exe+6BD18 - 90                    - nop
XXX.exe+6BD19 - 90                    - nop
XXX.exe+6BD1A - 90                    - nop
XXX.exe+6BD1B - 90                    - nop
XXX.exe+6BD1C - 90                    - nop
XXX.exe+6BD1D - 90                    - nop
XXX.exe+6BD1E - 90                    - nop
XXX.exe+6BD1F - 90                    - nop
XXX.exe+6BD20 - 8A 0D 84C4F400        - mov cl,[XXX.exe+B4C484] { (68) }
XXX.exe+6BD26 - B8 01000000           - mov eax,00000001 { 1 }
XXX.exe+6BD2B - 84 C8                 - test al,cl
XXX.exe+6BD2D - 74 0B                 - je XXX.exe+6BD3A
XXX.exe+6BD2F - 66 81 25 84C4F400 FEFF - and word ptr [XXX.exe+B4C484],FFFE { (68),65534 }
XXX.exe+6BD38 - EB 07                 - jmp XXX.exe+6BD41
XXX.exe+6BD3A - 66 09 05 84C4F400     - or [XXX.exe+B4C484],ax { (68) }
XXX.exe+6BD41 - E9 AA010000           - jmp XXX.exe+6BEF0
XXX.exe+6BD46 - 90                    - nop
XXX.exe+6BD47 - 90                    - nop
XXX.exe+6BD48 - 90                    - nop
XXX.exe+6BD49 - 90                    - nop
XXX.exe+6BD4A - 90                    - nop
XXX.exe+6BD4B - 90                    - nop
XXX.exe+6BD4C - 90                    - nop
XXX.exe+6BD4D - 90                    - nop
XXX.exe+6BD4E - 90                    - nop
XXX.exe+6BD4F - 90                    - nop
XXX.exe+6BD50 - 8A 0D 84C4F400        - mov cl,[XXX.exe+B4C484] { (68) }
XXX.exe+6BD56 - B8 10000000           - mov eax,00000010 { 16 }
XXX.exe+6BD5B - 84 C8                 - test al,cl
XXX.exe+6BD5D - 74 0B                 - je XXX.exe+6BD6A
XXX.exe+6BD5F - 66 81 25 84C4F400 EFFF - and word ptr [XXX.exe+B4C484],FFEF { (68),65519 }
XXX.exe+6BD68 - EB 07                 - jmp XXX.exe+6BD71
XXX.exe+6BD6A - 66 09 05 84C4F400     - or [XXX.exe+B4C484],ax { (68) }
XXX.exe+6BD71 - E9 7A010000           - jmp XXX.exe+6BEF0
XXX.exe+6BD76 - 90                    - nop
XXX.exe+6BD77 - 90                    - nop
XXX.exe+6BD78 - 90                    - nop
XXX.exe+6BD79 - 90                    - nop
XXX.exe+6BD7A - 90                    - nop
XXX.exe+6BD7B - 90                    - nop
XXX.exe+6BD7C - 90                    - nop
XXX.exe+6BD7D - 90                    - nop
XXX.exe+6BD7E - 90                    - nop
XXX.exe+6BD7F - 90                    - nop
XXX.exe+6BD80 - 8A 0D 84C4F400        - mov cl,[XXX.exe+B4C484] { (68) }
XXX.exe+6BD86 - B8 20000000           - mov eax,00000020 { 32 }
XXX.exe+6BD8B - 84 C8                 - test al,cl
XXX.exe+6BD8D - 74 0B                 - je XXX.exe+6BD9A
XXX.exe+6BD8F - 66 81 25 84C4F400 DFFF - and word ptr [XXX.exe+B4C484],FFDF { (68),65503 }
XXX.exe+6BD98 - EB 07                 - jmp XXX.exe+6BDA1
XXX.exe+6BD9A - 66 09 05 84C4F400     - or [XXX.exe+B4C484],ax { (68) }
XXX.exe+6BDA1 - E9 4A010000           - jmp XXX.exe+6BEF0
XXX.exe+6BDA6 - 90                    - nop
XXX.exe+6BDA7 - 90                    - nop
XXX.exe+6BDA8 - 90                    - nop
XXX.exe+6BDA9 - 90                    - nop
XXX.exe+6BDAA - 90                    - nop
XXX.exe+6BDAB - 90                    - nop
XXX.exe+6BDAC - 90                    - nop
XXX.exe+6BDAD - 90                    - nop
XXX.exe+6BDAE - 90                    - nop
XXX.exe+6BDAF - 90                    - nop
XXX.exe+6BDB0 - 8A 0D 84C4F400        - mov cl,[XXX.exe+B4C484] { (68) }
XXX.exe+6BDB6 - B8 40000000           - mov eax,00000040 { 64 }
XXX.exe+6BDBB - 84 C8                 - test al,cl
XXX.exe+6BDBD - 74 0B                 - je XXX.exe+6BDCA
XXX.exe+6BDBF - 66 81 25 84C4F400 BFFF - and word ptr [XXX.exe+B4C484],FFBF { (68),65471 }
XXX.exe+6BDC8 - EB 07                 - jmp XXX.exe+6BDD1
XXX.exe+6BDCA - 66 09 05 84C4F400     - or [XXX.exe+B4C484],ax { (68) }
XXX.exe+6BDD1 - E9 1A010000           - jmp XXX.exe+6BEF0

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表于 2021-1-21 22:05:47 | 显示全部楼层
本帖最后由 minews 于 2021-1-21 22:23 编辑

你把这个数换算成二进制就完事了    哪个位上是1  就表示他被选中了
00001111
表示
2的0次方被选中---1
2的1次方被选中---2
2的2次方被选中---4
2的3次方被选中---8
具体说到算法就是求位与运算即可

8&15!=0 表示选中了
8&16==0 表示没选中


回复 支持 反对

使用道具 举报

发表于 2021-1-18 15:51:44 | 显示全部楼层
虽然我看不懂  我还是要顶一顶  学习一下
回复 支持 反对

使用道具 举报

发表于 2021-1-18 18:49:48 | 显示全部楼层
本帖最后由 3256345 于 2021-1-18 18:52 编辑

64+32+16+8+4+1=125
不知道你要干什么,都有唯一的结果
你的1+4+64=69  125-69=56
56=32+8+16只有唯一的组合
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 20:09:17 | 显示全部楼层
3256345 发表于 2021-1-18 18:49
64+32+16+8+4+1=125
不知道你要干什么,都有唯一的结果
你的1+4+64=69  125-69=56

比如说我在游戏中 打开组队时 程式中的组队复选框开关也会同步打勾

如果我同时开好几个开关 也会同步..但不知道怎么写才能有效率的让他自动判断哪几个复选框该打勾哪几个不打勾
回复 支持 反对

使用道具 举报

发表于 2021-1-18 21:41:57 | 显示全部楼层
bestkakkoii 发表于 2021-1-18 20:09
比如说我在游戏中 打开组队时 程式中的组队复选框开关也会同步打勾

如果我同时开好几个开关 也会同步..但 ...

你能判断游戏的开关是否打开,就能同步控制复选框勾选啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-19 08:05:59 | 显示全部楼层
3256345 发表于 2021-1-18 21:41
你能判断游戏的开关是否打开,就能同步控制复选框勾选啊

我现在就是希望能藉由 X的值判断 开关开没开呀
回复 支持 反对

使用道具 举报

发表于 2021-1-19 18:29:32 | 显示全部楼层
bestkakkoii 发表于 2021-1-19 08:05
我现在就是希望能藉由 X的值判断 开关开没开呀

没有公式就先用最笨的方法,以后有了再替换吧
回复 支持 反对

使用道具 举报

发表于 2021-1-20 13:55:34 | 显示全部楼层
没解决的话可加我,写个函数即可,有偿
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-22 01:02:32 | 显示全部楼层
本帖最后由 bestkakkoii 于 2021-1-22 02:47 编辑
minews 发表于 2021-1-21 22:05
你把这个数换算成二进制就完事了    哪个位上是1  就表示他被选中了
00001111
表示

感谢大佬解惑
还是有点不太明白 &(按位与运算)所以还是用了一点"取巧"的办法..

  1. function cbin(dec)
  2.     var bin = ""
  3.     while(dec != 1)
  4.         if((dec % 2) == 0)
  5.             dec = int((dec / 2))
  6.             bin = "0" & bin
  7.         else
  8.             dec = int(((dec - 1) / 2))
  9.             bin = "1" & bin
  10.         end
  11.     end
  12.     if(dec != 0)
  13.         bin = "1" & bin
  14.     end
  15.     if(strlen(bin) == 3)
  16.         bin = "0000" & bin
  17.     elseif(strlen(bin) == 4)
  18.         bin = "000" & bin
  19.     elseif(strlen(bin) == 5)
  20.         bin = "00" & bin
  21.     elseif(strlen(bin) == 6)
  22.         bin = "0" & bin
  23.     end
  24.     var R = array()
  25.     for(var i = 0; i < 7; i++)
  26.         var ck = strsub(bin, i, i + 1)
  27.         arraypush(R, ck)
  28.     end
  29.     return R
  30. end
  31. function checkswitcher()
  32.     var X = bc.ReadInt(hwnd, "<XXX.exe>+XXXXXX", 0)
  33.     traceprint(X)
  34.     var result = cbin(X)
  35.     if(result[4] == 1)
  36.         checksetstate("s16", true)
  37.     else
  38.         checksetstate("s16", false)
  39.     end
  40.     if(result[3] == 1)
  41.         checksetstate("s17", true)
  42.     else
  43.         checksetstate("s17", false)
  44.     end
  45.     if(X % 2 != 0)
  46.         checksetstate("s19", true)
  47.     else
  48.         checksetstate("s19", false)
  49.     end
  50.     if(result[2] == 1)
  51.         checksetstate("s18", true)
  52.     else
  53.         checksetstate("s18", false)
  54.     end
  55.     if(result[1] == 1)
  56.         checksetstate("s20", true)
  57.     else
  58.         checksetstate("s20", false)
  59.     end
  60.     if(result[0] == 1)
  61.         checksetstate("s21", true)
  62.     else
  63.         checksetstate("s21", false)
  64.     end
  65. end
复制代码


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2021-3-5 11:56 , Processed in 0.055627 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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