攻防easyre-153

攻防easyre-153,第1张

攻防easyre-153

先拖入exeinfope查壳,发现是简单的 upx壳

所以用upx.exe脱壳:upx-d

脱壳之后拖入ida,f5看main函数

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int pipedes[2]; // [esp+18h] [ebp-38h] BYREF
  __pid_t v5; // [esp+20h] [ebp-30h]
  int v6; // [esp+24h] [ebp-2Ch] BYREF
  char buf[30]; // [esp+2Eh] [ebp-22h] BYREF
  unsigned int v8; // [esp+4Ch] [ebp-4h]

  v8 = __readgsdword(0x14u);
  pipe(pipedes);	//创建管道,用于父进程和子进程的通信
  v5 = fork();		//创建子进程,与父进程同时运行fork后面的所有代码,在父进程中v5的值是 子进程的进程号(pid),在子进程汇总v5的值是0,如果出现错误,v5的值为负数。


if ( !v5 ) { puts("\nOMG!!!! I forgot kid's id"); write(pipedes[1], "69800876143568214356928753", 29u); puts("Ready to exit "); exit(0); } read(pipedes[0], buf, 29u); //将pipedes的内容(69...53)复制到buf缓冲区 __isoc99_scanf("%d", &v6); if ( v6 == v5 ) { if ( (unsigned __int8)*(_DWORD *)((char *)lol + 3) == 204 ) { puts(":D"); exit(1); } printf("\nYou got the key\n "); lol(buf); //在这里调用lol函数 } wait(0); return 0; }

打开lol函数:

int __cdecl lol()
{
  return printf("flag_is_not_here");
}

发现没什么,但打开汇编:

发现跳转的地方

mov     [ebp+var_C], 0
cmp     [ebp+var_C], 1
jnz     short loc_80486D3

这里会发生永恒跳转

所以将jnz改为jz(hex窗口中将该部分的75改为74)

保留更改:

int __cdecl lol(_BYTE *a1)
{
  char v2[7]; // [esp+15h] [ebp-13h] BYREF
  int v3; // [esp+1Ch] [ebp-Ch]

  v2[0] = 2 * a1[1];
  v2[1] = a1[4] + a1[5];
  v2[2] = a1[8] + a1[9];
  v2[3] = 2 * a1[12];
  v2[4] = a1[18] + a1[17];
  v2[5] = a1[10] + a1[21];
  v2[6] = a1[9] + a1[25];
  v3 = 0;
  return printf("%s", v2);
}

于是用c语言按照该逻辑解密:

#include 
int main()
{
	char a1[] = "69800876143568214356928753";
	char v2[7]; // [esp+15h] [ebp-13h] BYREF
  int v3; // [esp+1Ch] [ebp-Ch]

  v2[0] = 2 * (int)a1[1];
  v2[1] = a1[4] + a1[5];
  v2[2] = a1[8] + a1[9];
  v2[3] = 2 * a1[12];
  v2[4] = a1[18] + a1[17];
  v2[5] = a1[10] + a1[21];
  v2[6] = a1[9] + a1[25];
  v3 = 0;	
	printf("%s",v2);
	return 0;
}

最后得到flag:rhelheg

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/565039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)

保存