标签:BUUCTF esp int easyre char Re ebp v6 v4
有个upx的壳,脱掉后,主函数代码:
int __cdecl main(int argc, const char **argv, const char **envp) { char v4[12]; // [esp+12h] [ebp-2Eh] BYREF int v5[3]; // [esp+1Eh] [ebp-22h] char v6[5]; // [esp+2Ah] [ebp-16h] BYREF int v7; // [esp+2Fh] [ebp-11h] int v8; // [esp+33h] [ebp-Dh] int v9; // [esp+37h] [ebp-9h] char v10; // [esp+3Bh] [ebp-5h] int i; // [esp+3Ch] [ebp-4h] __main(); qmemcpy(v4, "*F'\"N,\"(I?+@", sizeof(v4)); printf("Please input:"); scanf("%s", v6); if ( v6[0] != 'A' || v6[1] != 'C' || v6[2] != 'T' || v6[3] != 'F' || v6[4] != '{' || v10 != '}' ) return 0; v5[0] = v7; v5[1] = v8; v5[2] = v9; for ( i = 0; i <= 11; ++i ) { if ( v4[i] != _data_start__[*((char *)v5 + i) - 1] ) return 0; } printf("You are correct!"); return 0; }
重点就是在
v4[i]!=_data_start_
判断是否相等,
然后找到_data_start的值:
就是把在data里找v4
脚本:
v4="*F'\"N,\"(I?+@" data = '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"' flag='' for i in range(len(v4)): flag+=chr(data.find(v4[i])+1) print(flag)
得到:U9X_1S_W6@T?
包上flag{U9X_1S_W6@T?}
标签:BUUCTF,esp,int,easyre,char,Re,ebp,v6,v4 来源: https://www.cnblogs.com/1ucky/p/16122739.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。