首页
社区
课程
招聘
1
[原创]2019看雪CTF 晋级赛Q2 第七题:部落冲突(01-去除反调试) by 心学
发表于: 2019-6-27 14:59 6933

[原创]2019看雪CTF 晋级赛Q2 第七题:部落冲突(01-去除反调试) by 心学

htg 活跃值
4
2019-6-27 14:59
6933

4、阻止加密:sub_4CE064,强制返回0:

关键在SH_LYD:004CE093 C6 45 FF 01:将其修改为 C6 45 FF 00;使得程序强制返回0。避免后面的一个异或加密

5、避免掉坑:004D0CF4(实际拷贝到004010D0),不予执行 Int 2E

软件会将 004D0CF4拷贝到 004010D0处,拷贝前会先异或0x55自己。

那么为了使得解密后拷贝的代码为9090,那么就需要将存在软件内的代码改为C5C5

原始文件:

CD2E对应于987B; 那么987B →C5C5

工具:IDA
目的:去除反调试、以便于IDA能静态分析源码
一、去除主要流程:
1、Patch:SH_LYD:004CE670-SH_LYD:004CE675:909090909090
2、Patch:SH_LYD:004CE6FB-SH_LYD:004CE700: 909090909090
3、Patch: SH_LYD:004CE0AF:9090
4、阻止加密:SH_LYD:004CE096:00
5、避免掉坑:SH_LYD:004D0CFF-SH_LYD:004D0D00:C5C5      
相关的IDA代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static main(void)
{
  auto code1,code2,code3,code4,code5,i;
  code1 = 0x004CE670;
  code2 = 0x004CE6FB;
  code3 = 0x004CE0AF;
  code4 = 0x004CE096;
  code5 = 0x004D0CFF;
 
  for ( i = 0; i < 6 ; i ++ )
  {
    PatchByte(code1 + i,0x90);PatchByte(code2 + i,0x90);
  }
  PatchByte(code3,0x90);PatchByte(code3+1,0x90);
  PatchByte(code4,0x00);
  PatchByte(code5,0xC5);PatchByte(code5+1,0xC5);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static main(void)
{
  auto code1,code2,code3,code4,code5,i;
  code1 = 0x004CE670;
  code2 = 0x004CE6FB;
  code3 = 0x004CE0AF;
  code4 = 0x004CE096;
  code5 = 0x004D0CFF;
 
  for ( i = 0; i < 6 ; i ++ )
  {
    PatchByte(code1 + i,0x90);PatchByte(code2 + i,0x90);
  }
  PatchByte(code3,0x90);PatchByte(code3+1,0x90);
  PatchByte(code4,0x00);
  PatchByte(code5,0xC5);PatchByte(code5+1,0xC5);
}

二、主要源代码分析过程(流程):
1、Patch:CheckRemoteDebuggerPresent
二、主要源代码分析过程(流程):
1、Patch:CheckRemoteDebuggerPresent

[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2019-6-28 11:28 被kanxue编辑 ,原因:
收藏
免费 1
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2023-1-25 00:14
最新回复 (3)
雪    币: 977
活跃值: (435)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
优秀  
2019-6-27 16:02
0
雪    币: 10846
活跃值: (1089)
能力值: (RANK:190 )
在线值:
发帖
回帖
粉丝
3
优秀
2019-6-27 16:14
0
雪    币: 5583
活跃值: (3508)
能力值: ( LV12,RANK:417 )
在线值:
发帖
回帖
粉丝
4
此次仅处理了能调出正常的CMD窗口,提示用户输入信息。
还未实现SMC清除,静态分析还存在困难。我在跟踪窗口调用前的语句时,发现了所有提前下断点的语句处,SMC都会将其修改为00,看来应该是与调试器替换语句有关系,将断点处的代码替换成了0x00。
不过,一旦在主程序上JMP 0x00403B4D 后,再设置中断,就不会出现问题。
下一步尝试解除SMC,逐步Patch到程序文件来,nop掉赋值语句。这样就可以提前下断点了
2019-6-27 16:43
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册