-
-
[原创] 2018国庆题叹息之墙WP
-
发表于: 2018-10-2 22:38 3862
-
本题开始就会发现一个(让人)很方的函数sub_409FF0,不要怕,其实就是 循环+if分支.
字符串找到成功提示00044F13D,他由
0040A57A sub eax, 0AD1C95B5h //if [esi+3010h]==0AD1C95B5 触发
硬断跟踪发现他多处被写入不同的常量,再输入注册码后第一次循环就被写入了是常量,
那么这里肯定就是类似余 hash迭代 (链式查表) 再判断分支.hash多次运算,只有正确hash才能进入正确分支.
先找输入影响的位置
通过run跟踪对比,硬件断点,发现位置0044C19D,0044D170,其实是把所有输入的查表再求和
修改 0044D193 call funCalc_401020 函数返回值=6E616B34注册成功说明方法正确
现在只要暴力出输入就行了, 9个[0,FFFFFFFFF]的和范围在 9000000000 之间,只要暴力出来就行了
我直接在OD里修改代码跑
几小时后发现跑太慢了,然后自己把函数funCalc_401020简化,自己写代码去跑
跑的结果是
00000000:55121C15 00000000
00000001:54B3EBA3 00000001
00000002:5455BB31 00000002
00000003:53F78ABF 00000003
00000004:53995A4D 00000004
00000005:533B29DB 00000005
00000006:52DCF969 00000006
00000007:527EC8F7 00000007
剩下问题是
从数据350组数据中取9个以下来求和,其和=55121C15,154B3EBA3,25455BB31,353F78ABF,453995A4D,5533B29DB,652DCF969,7527EC8F7...
开始想到什么好算法可以快速求解
发现数据好像有规律,这问题就好解决了(只要有规律,就有捷径可走,那问题就是找出这条捷径)
我先排序,看差值大多是00F17B92,所以我先直接 %00F17B92 求解,这种可以凑出一些特殊数据
但发现这个值还是很大,然后我直接分解因数,发现他们几乎都有通用的 2 3 5 7 11 13 17 这些素数,每次1个
依次% 2, % 3, % 5, % 7, % 11, %13, % 17 非0得到如下结果
n = (2,3,5...) 记录下 table[x]%n 非0结果
% table[x] table[x]%n 5121C15,154B3EBA3,25455BB31... %n
2 7FD0E7C7 00000001
1 1 1 1 1 1 1 1 (10进制)
3 AA6BDFB4 00000002
5535EFDA 00000001
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创] 2018国庆题叹息之墙WP 3863
- [原创]看雪 2018CTF 第7题 wp 3339
- [原创] ctf2018 第四题wp 2635
- [原创] 第二题wp 4007