Reversing.kr Easy Keygen、Easy Unpack

Reversing.kr Easy Keygen、Easy Unpack

一天一道CTF题目,能多不能少

Easy Keygen
下载文件打开,发现readme.txt中存在提示:
在这里插入图片描述
大概意思是找对应这一串数字的名字,,,
用IDA打开,找到输入的地方,得到一个主要的函数:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  signed int v3; // ebp
  signed int i; // esi
  char v6; // [esp+Ch] [ebp-130h]
  char v7; // [esp+Dh] [ebp-12Fh]
  char v8; // [esp+Eh] [ebp-12Eh]
  char v9; // [esp+10h] [ebp-12Ch]
  char v10; // [esp+11h] [ebp-12Bh]
  __int16 v11; // [esp+71h] [ebp-CBh]
  char v12; // [esp+73h] [ebp-C9h]
  char v13; // [esp+74h] [ebp-C8h]
  char v14; // [esp+75h] [ebp-C7h]
  __int16 v15; // [esp+139h] [ebp-3h]
  char v16; // [esp+13Bh] [ebp-1h]

  v9 = 0;
  v13 = 0;
  memset(&v10, 0, 0x60u);
  v11 = 0;
  v12 = 0;
  memset(&v14, 0, 0xC4u);
  v15 = 0;
  v16 = 0;
  v6 = 16;
  v7 = 32;
  v8 = 48;
  sub_4011B9(aInputName);
  scanf(aS, &v9);
  v3 = 0;
  for ( i = 0; v3 < (signed int)strlen(&v9); ++i )
  {
    if ( i >= 3 )
      i = 0;
    sprintf(&v13, aS02x, &v13, *(&v9 + v3++) ^ *(&v6 + i));
  }
  memset(&v9, 0, 0x64u);
  sub_4011B9(aInputSerial);
  scanf(aS, &v9);
  if ( !strcmp(&v9, &v13) )
    sub_4011B9(aCorrect);
  else
    sub_4011B9(aWrong);
  return 0;
}

关键地方:
在这里插入图片描述
首先输入名字,然后根据名字得到一串字符
后面再对你输入的字符进行比较,一样就输出正确
直接编写脚本:

s = "5B134977135E7D13"

v3 = 0
v6 = [16,32,48]

flag = ""
for i in range(0,int(len(s)/2)):
	x = int(str(s[i*2:(i+1)*2]),16)
	#print((x ^ (v6 + v4)) - v3)
	flag += chr(x ^ (v6[i % 3]))
print(flag)

得到flag:K3yg3nm3

Easy Unpack
看名字就知道是脱壳~
直接下载打开,也有一个readme.txt:
在这里插入图片描述
找到OEP也就是程序入口地址
直接用OD打开,载入的时候会弹出如下一个框:
在这里插入图片描述
这个时候我们就要选择否,并且一般这个时候使用的是单步跟踪法
关于单步跟踪法:

单步跟踪法就是利用OD的单条指令执行功能,从壳的入口一直执行到OEP,最终通过这个OEP将原程序dump出来。然当,在单步跟踪的时候需要跳过一些不能执行到的指令。
  使用单步跟踪法追踪OEP的常见步骤:
  1、用OD载入待脱壳文件,如果出现压缩提示,选择“不分析代码”;
  2、向下单步跟踪,实现向下的跳转;
  3、遇到程序往上跳转的时候(包括循环),在回跳的下一句代码上单击并按键盘上的“F4”键跳过回跳指令;
  4、OD中的绿色线条表示跳转没有实理,不必理会,红色线条表示跳转已经实现;
  5、如果刚载入程序的时候,在附近有一个CALL指令,那么就要按键盘上的“F7”键跟进这个CALL内,不然程序很容易运行起来;
  6、在跟踪的时候,如果执行某个CALL指令后就运行,一定要按键盘上的“F7”键进入这个CALL之内再单步跟踪;
  7、遇到在popad指令下的远转移指令时,要格处注意,因为这个远转移指令的目的地很可能就是OEP。

根据上面的步骤来一步一步执行,最后来到如下图的地方:
在这里插入图片描述
继续执行来都如下地方:
在这里插入图片描述
如此熟悉,很想平时的程序入口地址,而且刚刚那个jmp跳这么远
怀疑刚刚那个jmp跳过来的就是OEP地址
直接提交00401150
正确~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值