Flare_On_7

第七届年度Flare-On挑战赛

0x1


password验证逻辑,key=ghost

1
2
3
4
def password_check(input):
altered_key = 'hiptu'
key = ''.join([chr(ord(x) - 1) for x in altered_key])
return input == key

游戏逻辑,需要current_coins >target_amount - 2**20,修改代码逻辑,给current_coins赋值即可

1
2
3
4
5
6
7
8
while not done:
target_amount = (2**36) + (2**35)
#current_coins = (2**36) + (2**35) +1
if current_coins > (target_amount - 2**20):
while current_coins >= (target_amount + 2**20):
current_coins -= 2**20
victory_screen(int(current_coins / 10**8))
return

flag:idle_with_kitty@flare-on.com

0x2


尝试运行程序时提示无效的win32程序,使用010 Editer发现.rsrc节区不全,使用全0字节补齐后程序仍无法正常运行

使用工具DIE查看程序加壳信息为UPX(3.94)[NRV,best]

使用UPX3.94加壳器尝试解包软件,解包后仍无法运行

使用SxsTrace工具,提示为指令清单错误

使用CFF Explorer删除程序清单

通过CFF Explorer查看导入表发现缺失模块名称,根据API猜测填写模块名称,成功运行

flag:Congrats! Your key is: C0rruptGarbag3@flare-on.com

0x3


根据提示信息调试mydude.exe,通过字符串找到High Score并下断,发现cmp比较值为0x128,绕过判断后游戏提示winner但是并未出现flag

ida转到High Score地址,通过Cheat Engine对附近变量scorehigh_score进行修改,无效果

ida查看交叉引用找到对score赋值的函数,使用CE尝试修改判断条件,让程序一定进入循环

1
2
3
4
5
6
7
if ( *(_BYTE *)(v3 + 248) == *(_BYTE *)(v24 + 248) )
{
v16 = score__h34o6jaI3AO6iOQqLKaqhw + 1;
if ( __OFADD__(1, score__h34o6jaI3AO6iOQqLKaqhw) )
raiseOverflow(v22);
*(_BYTE *)(v3 + 24) = 1;
score__h34o6jaI3AO6iOQqLKaqhw = v16;

然后按住下键不松手,即可通关

flag:1t_i5_wEdn3sd4y_mY_Dud3s@flare-on.com

通过代码实现修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<windows.h>
int main()
{
DWORD pid = 2604;
HANDLE hand = OpenProcess(PROCESS_ALL_ACCESS, NULL, pid);//打开进程句柄
if (!hand)
return 0;
DWORD oldflag;
VirtualProtectEx(hand,(LPVOID)0x432358,0x1000, PAGE_EXECUTE_READWRITE,&oldflag);
BYTE code[6] = {0xE9,0x04,0xFF,0xFF,0xFF,0x90};
SIZE_T size = 0;
WriteProcessMemory(hand, (LPVOID)0x432358, code, 6, &size);
return 0;
}

0x4


office宏代码自动执行folderol()函数,宏代码无法正常运行

新建xlsx,边调边修宏代码逻辑

待更新。。。。。