EZCPP
64位
进入那个函数
看*16,*32怪怪的
所以就是左移4位=2的四次方=16与左移五位
就很像tea加密惹
#include <stdio.h>
void Tea(int &v0, int &v1){
// int k[4]={3412,4123,1234,2341};
int sum=-17889239584,i;
int delta=-559038737;
// int k0=k[0],k1=k[1],k2=k[2],k3=k[3];
for(i=0;i<32;i++){
v1-=((v0*16)+3412)^(v0+sum)^((v0*32)+4123);
v0-=((v1*16)+1234)^(v1+sum)^((v1*32)+2341);
sum-=delta;
}
}
/*void Tea(int &r,int &l)
{
int sum=0,delta=-559038737;
int i;
int key[4]={1234,2341,3412,4123};
for(i=0;i<32;i++)
{
r -= ((l << 4) + key[2]) ^ (l + sum) ^ ((l << 5) + key[3]);
l -= ((r << 4) + key[0]) ^ (r + sum) ^ ((r << 5) + key[1]);
sum += delta;
}
}
*/
int main(){
unsigned char a[] =
{
0x88, 0x6A, 0xB0, 0xC9, 0xAD, 0xF1, 0x33, 0x33, 0x94, 0x74,
0xB5, 0x69, 0x73, 0x5F, 0x30, 0x62, 0x4A, 0x33, 0x63, 0x54,
0x5F, 0x30, 0x72, 0x31, 0x65, 0x6E, 0x54, 0x65, 0x44, 0x3F,
0x21, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
int *x = (int*)(a + 3);
int *y = (int*)(a + 7);
Tea( *x, *y );
int* x3=(int*)(a + 2);
int* y3=(int*)(a + 6);
Tea(*x3,*y3);
int* x2=(int*)(a + 1);
int* y2=(int*)(a + 5);
Tea(*x2,*y2);
int* x1=(int*)(a + 0);
int * y1=(int*)(a + 4);
Tea(*x1,*y1);
for(int i=0;i<32;i++)
printf("%c",a[i]);
return 0;
}
先看下一个哈
arithmetic
emm用ida打开发现蛮奇怪的
然后观赏wp
用010打开把Ari改成upx,学一下思路
然后脱壳ze
改三处
鼠鼠我啊
用ida打开
不是很懂这一堆的意思
观察wp
动态规划数塔问题
emmm
以后再说吧
#include<iostream>
#include<algorithm>
using namespace std;
int n;
//dp数塔
int a[1000][1000];
//存放着最大路径
int step[1000];
//原数塔
int b[1000][1000];
int main(){
cin >> n;
//读取数塔
for (int i = 0; i < n; i++){
for (int j = 0; j <= i; j++){
cin >> a[i][j];
b[i][j] = a[i][j];
}
}
//计算最大和
for (int i = n - 2; i >= 0; i--){
for (int j = 0; j <= i; j++){
a[i][j] += max(a[i + 1][j], a[i + 1][j + 1]);
}
}
//求最长路径
int x = 0, y = 0;
//根据a数组来求,a数组是已经被修改过的数组,每一层的值是从底层开始求和的最优解
step[0] = b[0][0];
for (int i = 0; i < n - 1; i++){
//若左边大时
if (a[x + 1][y] > a[x + 1][y + 1]){
step[i + 1] = b[x + 1][y];
x++;
cout<<"1";
}
//右边的数据较大时
else{
step[i + 1] = b[x + 1][y + 1];
x++;
y++;
cout<<"2";
}
}
return 0;
}
先跳过这一部吧,以后再补
加密即可
babyre
open,进入main
这都啥啊
交叉引用再反编译
下面是多线程
啊
进入1708那个函数
有一个什么信号异常,看汇编
放放,不懂什么是
零异常and信号量
判断函数
那个那个多线程部分
没很懂具体
加减异或
#include <stdio.h>
#include <stdint.h>
int main(){
unsigned char t1[] ="feifei";
for ( int i = 0; i <3; ++i )
t1[i]^= 17;
uint32_t data[33] =
{
12052,
78,
20467,
109,
13016,
109,
27467,
-110,
9807,
91,
21243,
-100,
11121,
20,
10863,
-107,
10490,
29,
10633,
-101,
10420,
78,
17670,
-38,
6011,
-4,
16590,
125,
10723,
15,
7953,
255
};
for(int i=31;i>=0;i--){
if(i%4==3)
data[i] ^= data[i + 1] - *((char *)&t1 + (i + 1) % 6);
if(i%4==2)
data[i] /= data[i + 1] + *((char *)&t1 + (i + 1) % 6);
if(i%4==1)
data[i] += *((char *)&t1 + (i + 1) % 6) ^ data[i + 1];
if(i%4==0)
data[i] -= *((char *)&t1 + (i + 1) % 6) * data[i + 1];
}//需要第33个data,即data[32]
for(int i=0;i<32;i++)
printf("%c",data[i]);
return 0;
}
babyAndroid
打开
check1
check2
native层(不是很懂)
用解压软件打开attachment.apk
把.so拖进ida
进入off26E8
一个AES加密