安全是有分量的

云盾高防采集_国盾云_快速接入

2021-08-23 19:24栏目:网络

在这个简单的挑战中,我们得到了远程服务的二进制代码:

$file baby rebaby re:ELF 64位LSB可执行文件,x86-64,版本1(SYSV),动态链接(使用共享libs),适用于GNU/Linux 2.6.32,而不是剥离

这要求13个输入,然后返回"错误",服务器cc防御软件,防御cc免费工具,除非我们给出它正确输入。

$./baby reVar[0]:1Var[1]:2Var[2]:3Var[3]:4Var[4]:5Var[5]:6Var[6]:7Var[7]:8Var[8]:9Var[9]:10Var[10]:11Var[11]:12Var[12]:13错误

需要一点反向工程来了解情况。这个二进制文件没有打包,包含符号和函数名。有趣的功能非常突出:CheckSolution:

有趣的是,防御ddos,Hopper立即给出了(几乎)正确的反编译结果CheckSolution的代码,而Hexrays由于简单的反反转技巧(即使在摆脱了这些保护之后,艾达给了我们一个比Hopper干净得多的C代码,但其中包括一些错误:

CheckSolution首先计算一组常数,关闭cc手机防御级别调,然后用作有符号32位上线性方程组的系数整数。13个解决方案是命令行预期的数字参数

我们从反编译代码

if(*(int32_t*)(var_2B8+0x30)*0xd5e5+*(int32_t*)(var_2B8+0x2c)*0x99ae+\*(int32_t*)(var_2B8+0x28)*var_288+*(int32_t*)(var_2B8+0x24)*0x3922+\*(int32_t*)(var_2B8+0x20)*0xe15d+*(int32_t*)(var_2B8+0x1c)*var_294+\*(int32_t*)(var_2B8+0x18)*var_298+*(int32_t*)(var_2B8+0x14)*0xa89e+\(var_2B0**(int32_t*)var_2B8-*(int32_t*)(var_2B8+0x4)*var_2AC-\*(int32_t*)(var_2B8+0x8)*var_2A8-*(int32_t*)(var_2B8+0xc)*0xb4c1+\*(int32_t*)(变量2B8+0x10)*变量2A0!=0x1468753){rax=0x0;}否则{如果(*(int32_t*)(var_2B8+0x30)*0xcfec+(*(int32_t*)(var_2B8+0x14)*var_268+\*(int32_t*)(var_2B8+0x10)*0x39ca+(var_27C**(int32_t*)var_2B8+\*(int32_t*)(var_2B8+0x4)*var_278-*(int32_t*)(var_2B8+0x8)*0x1783+\*(int32_t*)(var_2B8+0xc)*0x9832-*(int32_t*)(var_2B8+0x18)*0x345-\*(int32_t*)(var_2B8+0x1c)*var_260-*(int32_t*)(var_2B8+0x20)*0xc5a0-\*(int32_t*)(var_2B8+0x24)*0x2e35-*(int32_t*)(var_2B8+0x28)*0x4e4e-\*(int32_t*)(变量2B8+0x2c)*变量250)!=0x162f30){rax=0x0;}否则{(...)对于表示为Numpy数组中系数列表的方程式(使用我们原始的注释行):

将Numpy导入为np

res=np.数组([213993791453872,通过代理服务器防御ddos,-5074020,-546793377787144,-8863847, -747805, -11379056, -166140, 9010363, -4169825, 4081505,1788229,])

等式=np.数组([#六角射线对v[9]>给出0错误[ 37485, -21621, -1874, -46273, 50633, 43166, 29554, 16388, 57693, 14626, 21090, 39342, 54757,],#[ 37485, -21621, -1874, -46273, 50633, 43166, 29554, 16388, 57693, 0, 21090, 39342, 54757,],[ 50936, 4809, -6019, 38962, 14794, 22599, -837, -36727, -50592, -11829, -20046, -9256, 53228,],[ -38730, 52943, -16882, 26907, -44446, -18601, -65221, -47543, 17702, -33910, 42654, 5371, 11469,],[ 57747, -23889, -26016, -25170, 54317, -32337, 10649, 34805, -9171, -22855, 8621, -634, -11864,],[ -14005, 16323, 43964, 34670, 54889, -6141, -35427, -61977, 28134, 43186, -59676, 15578, 50082,],[ -40760, -22014, 13608, -4946, -26750, -31708, 39603, 13602, -59055, -32738, 29341, 10305, -15650,],[ -47499, 57856, 13477, -10219, -5032, -21039, -29607, 55241, -6065, 16047, -4554, -2262, 18903,],[ -65419, 17175, -9410, -22514, -52377, -9235, 53309, 47909, -59111, -41289, -24422, 41178, -23447,],#霍珀说得对[ 1805, 4135, -16900, 33381, 46767, 58551, -34118, -44920, -11933, -20530, 15699, -36597, 18231,],#六边形版本->错误#[ 1805, 4135, -16900, 33381, 33422, 58551, -34118, -44920, -11933, -20530, 15699, -36597, 18231,],[ -42941, 61056, -45169, 41284, -1722, -26423, 47052, 42363, 15033, 18975, 10788, -33319, 63680,],[ -37085, -51590, -17798, -10127, -52388, 12746, 12587, 58786, -8269, 22613, 30753, -20853, 32216,],#hopper因为某种原因在这里得到了错误的标志#[ 36650, 47566, -33282, -59180, 65196, 9228, -59599, -62888, 48719, 47348, 37592, 57612, 40510,],[ 36650, 47566, -33282, -59180, 65196, 9228, -59599, -62888, 48719, 47348, -37592, 57612, 40510,],[ 51735, 35879, -63890, 4102, 59511, -21386, -20769, 26517, 28153, 25252, -43789, 25633, 7314,],])

然后我们使用Numpy的解算器求解系统:

x=np.linalg.solve(eqs,res)打印(x)

这为我们提供了以下解决方案[77.97.116.104.32.105.115.32.104.97.114.100.33.]

这显然给了我们一个标志:

$./baby reVar[0]:77Var[1]:97Var[2]:116Var[3]:104Var[4]:32Var[5]:105Var[6]:115Var[7]:32Var[8]:104Var[9]:97Var[10]:114Var[11]:100Var[12]:33旗帜是:数学很难!

您可以找到Legitbs发布的源代码,以及其他Mathematica或Mathematica解决方案焦虑(更简单!)

(从duksctf.github.io交叉发布。)