事情是怎么开始的?
项目组里那个老掉牙的系统,跑核心任务的,它有个臭毛病,必须得早上九点整,人工输入一个四位数的动态口令才能启动,晚一秒都不行。我们组的人,包括我,天天九点就像上刑一样,守着电脑。我TM连着被这个破规矩卡了两个月,两个月!天天九点准时在电脑前傻等,像个看门的。
有一天晚上,我跟我老婆抱怨这事儿。她就笑话我,说你不是搞技术的吗,天天被一个破口令拴着,跟个门童似的,能不能想个办法,弄个“自由通行证”让它自己跑?这话突然就给我点醒了。那系统太老了,没有API,不给我活路,那我就自己创造活路。
动手搞定“通行证”
我一开始想的是,既然是动态口令,那我能不能逆向它的算法?我先是抓了一堆包,分析了它客户端跟服务器的通讯。结果发现,全TM是私有加密,而且口令生成还得联网同步时间,不是那种标准的TOTP或者HOTP,搞不定。这是个死胡同,我折腾了两天就放弃了。
小编温馨提醒:本站只提供游戏介绍,下载游戏请前往89游戏主站,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
硬碰硬不行,那就得玩点“绅士游戏”了。
“绅士游戏”的真正玩法
既然代码搞不定算法,那我就搞定输入。系统要的不是那个口令生成过程,它要的只是那个正确的四位数被填进去。我决定绕过生成和验证,直接读取结果。
我的思路是:既然客户端能算出来,那内存里就一定存着。
- 我打开了一个内存分析工具,直接挂钩了生成口令的那个小小的客户端程序。
- 我先运行一次,记录了一堆内存地址。然后关闭,再运行一次,对比两次地址空间。
- 费了半天劲,终于定位到了那块存储口令的内存区域。那块区域里,每隔一段时间,就会出现一个新的四位数。
- 定位之后就简单了。我写了一个小型的注入模块,这玩意儿一启动,就强行读取主程序内存里的那块地址。
- 读取到那个四位数后,我写了个模拟输入脚本,通过后台操作,直接填充进老系统的输入框。
- 然后脚本自动定位那个“确认”按钮,模拟鼠标点击。
全程不到五秒钟。系统以为是我手动输的,它接受了,任务开始跑了。
解放了,这笔账太值了
这套东西跑通之后,我设定了一个定时任务。每天早上八点五十八分五十九秒,脚本自动启动,读取口令,输入,任务启动。
从那天起,我彻底解放了。那个破系统还在那儿老老实实跑着,但我的“自由通行证”已经生效了。这TMD才是真正的绅士游戏,靠脑子,不跟你玩蛮力。现在九点到了,我还在床上躺着,任务自己就完成了。那些还在等着手机上的口令的同事,他们还在骂系统垃圾。我啥也没说,就看着他们干着急。一个简单的内存穿透和模拟输入,省了我多少时间,这笔账太值了。

