这个题 其实还是挺简单的
但是吧。。。。。。。。。 比较可惜的一点就是 最近脑子不太对
看 pwn 看的头晕 然后课还是比较多 然后 比较可惜的是 心情也不太好吧
然后在 看雪论坛上 看到了一个病毒样本 准备 有空去 分析一波
好久没有 逆向过什么东西 所以 看了一个安卓的逆向题 看了看 玩了一下 感觉有点意思 就写了下来
这个题 有意思 就有意思在 一开始我并不知道这个题的真正入口点在哪
对着这个算法搞半天 发现 答案不对 然后看了一下so文件 发现也没有错 感觉有点搞
后来发现是 这里 才是 我晕。
直接 扣下来 逆向一下算法就ok了
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
int k;
int i;
int n;
int j;
int i1;
for(i1=10000000; i1<99999999; i1++)
{
k = 1;
i = 10000000;
n = 1;
if ((abs(i1 / 1000 % 100 - 36) == 3) && (i1 % 1000 % 584 == 0))
{
j = 0;
}
else
continue;
for (;;)
{
int m = n;
if (j < 3)
{
if (i1 / k % 10 != i1 / i % 10)
{
break;
m = 0;
}
}
else
{
if (m == 1)
{
printf("%d\n",i1);
char c1 = (char)(i1 / 1000000);
char c2 = (char)(i1 / 10000 % 100);
char c3 = (char)(i1 / 100 % 100 + 10);
printf("NJCTF{have%c%c%cf4n}\n",c1,c2,c3);
}
break;
}
k *= 10;
i /= 10;
j += 1;
}
}
return 0;
}
这里 有两个flag 第一个是正确的 。。第二个不知道正不正确。。 按正常思维就是 只会有一个答案是正确的 所以第二个应该是 有问题的