前段时间打了国赛,出了道bulid的pwn题,用到了几个杂而有趣的知识点,玩起来不太常规,做起来甚至可以说是有点难受,在此记录一下。
文末也有链接
最近学了学安卓,想到了一个之前分析过的mobile案例,一个apk通过调用lua实现函数的重写(就是之前血洗高校的一个apk),觉得很好玩,决定应用到题目里边。
文件结构:一个二进制文件,一个加密过的Lua文件,一个flag文件。
程序流程:
写的时候现学现卖,请师傅们指教
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <lua5.1/lua.h>
#include <lua5.1/lualib.h>
#include <lua5.1/lauxlib.h>
char flag[0x20];
char* c;
uint8_t *enc(uint8_t *data, int size) {//加密函数,和解密函数完全一致
uint8_t *temp = (uint8_t *)malloc(size);
int k[3]={2,3,5};
int i;
if (size) {
for (i = 0; i < size; i++) {
temp[i] = data[i]^k[i%3];
}
return temp;
}
}
int main()
{
setvbuf(stdout,0,2,0);
FILE *f = fopen("main.lua", "rb");//读入同目录加密过的lua文件
if (f == NULL)
return -1;
fseek(f, 0, SEEK_END);
long file_size = ftell(f);
uint8_t *buf = (uint8_t *)malloc(file_size);
rewind(f);