写了个CrackMe欢迎尝试
要求正确密码,不能改跳转,顺带请各位老师给点思路。地址:https://wwf.lanpv.com/iJ4pc1ob9w2f
上面的大佬已追出了密码,我在这里补充下算法:::
第一个CALL对吾爱两个字,取UNICODE码,如下:::吾3E54爱3172低前高后分别与58(X)异或,得吾543E异或58=5466,低前高后放入内存为6654,汉字为呦,同理爱7231异或58=7269,低前高后放入内存为6972,汉字为物,所以吾爱3E543172算出第三个call需要的前两个汉字为呦物66546972,输入密码的第一位与第二位进行同样的算法再比较,比较成功返回1并把算出的值传出,第三个CALL用
第二个CALL对解密两个字,取UNICODE码,如下:::解E389密C65B低前高后与分别58(X)异或,得解89E3异或58=89BB,低前高后放入内存为BB89,汉字为覻,同理密5BC6异或58=5B9E,低前高后放入内存为9E5B,汉字为实,所以解密E389C65B算出第三个call需要的后两个汉字为覻实BB899E5B,输入密码的第三位与第四位进行同样的算法再比较,比较成功返回1并把算出的值传出,第三个CALL用
第三个CALL把前两个CALL得到的呦物66546972与覻实BB899E5B进行合并,得呦物覻实66546972BB899E5B,不计算,输入密码的第5-8位也不计算,直接与刚合并的字符进行比较,比较成功返回1,
最后密码::::吾爱解密呦物覻实 密码:吾爱解密呦物覻实
不用搜字符串,随便输入一个密码,弹出错误提示
查看堆栈回溯得知调用了user32.MessageBoxW
向上回溯两级即可看到判断处
进入第一个判断 call login.14040D296
看到将字符串“吾爱”进行加密后在 call login.140402B89 进行比较
不用管算法,将“吾爱”输入密码第一个判断校验成功
同样,从第二个 call 得出第二段密码“解密”
到第三个 call 看不到明文的密码,但用的同一个子程序进行比较
找到 call login.140402B89 指令下断点,此时 rcx 就是指向第三段密码的指针
得到第三段密码“呦物覻实”
三段密码组合起来就是“吾爱解密呦物覻实”
发现是64位的.我没有环境果断放弃.{:5_118:} 为什么搜索字符串可以搜索到错误,而搜索不到正确呢 学编程的闹钟 发表于 2024-2-16 11:09
为什么搜索字符串可以搜索到错误,而搜索不到正确呢
可以改EAX赋值不?我只找到吾爱解密{:6_224:} 破竹而入 发表于 2024-2-16 11:49
cnkx就是正确密码吗 weekmio 发表于 2024-2-16 11:52
可以改EAX赋值不?我只找到吾爱解密
真密码在吾爱解密这两个call里可以看到,我把吾爱解密这四个字分成两份加密了下,然后组合起来的。 当字符串不能搜到时,怎么能准确断点在图片中这关键位置!有大佬说一下吗!!
页:
[1]
2