首先学到些看IDA伪代码的东西,可以以后方便自己更快的分析程序:
-
其中(&v8 + 6 * i)即为数组v8[6 * i]
-
*(i + a1) == *(&byte_40E000[4 * i] + v3)
即为
a1[i] == byte_40E000[4 * i][v3]其中byte_40E000是一个二维数组
0x04 Crackme4. 移动迷宫
程序要求输入长度为24的字符串,然后进入一个for循环,循环4次
.
进入这个函数,发现输入的字符和二维数组byte_40E000中的字符比较,取其列数+1存放到数组v8中。从这可以知道byte_40E000是一个6*4的二维数组。
然后程序进入一个while循环
1.首先判断根据输入的字符串获取的列数(1.2.3.4),使变量row,col变化。
2.然后取row,col的值作为二维数组byte_40E018的下标,判断是否为‘#’(‘#’的ascii码为35),如果不为且row不等于9且col不为8即成功。
3.byte_40E018为二维数组:
row,col的初始值为(3,0),要求终止值为(9,8),所以题目的意思就是走出这个迷宫(*为障碍物),根据输入的字符串获取的列数来控制走的方向,列数为1(向下),2(向上),3(向左),4(向右)。
4.最终走的顺序应该为411444 223222 441444 422223,对应的字符为:Ba47F1A256E0B347F1B2C6Ef