CTF
Reverse

Reverse Engineering

by watermelon

who am i?

西瓜

  • 建電副社+學術
  • 揪寒訓
  • ​APCS忘記帶身分證的傻逼
  • ​I人 不敢跟你打招呼一定是因為我社恐
  • 什麼都學 啥都學不好
  • 夜貓子
  • :suicide:
  • 貓戰/LOL 玩家

推個研究大攝影

Self_intro

root@watermelon
---------------
Name:watermelon_chou
Age:16
Class:221
Location:Banqiao
Interest:Self-study
Skill:nothing
CPU:Bad
GPU:Very Bad
Memory:Low
 NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNNWMMWWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNOc:oKWNNNWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNl..,kWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMMWWWWWMMMWWNNWMMMWNNWWMMMWNNWWMMMWNNWWMMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNNWMNo..'kMMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNo..,kWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWWNNNXKK0OOOOOOOkOO0KKXXNNWWMMMWWWNWWMMMWWWWWMMMWWNWWMMMWWNWWWNXXXKl..,OWWNNWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNX0Oxollc:;,,'''.....''''',,;:clodxOKKXNWWWWWWWWWWWWWWWWWWMMWWWWKkl:;;;:,..,kWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMMWNNWWMMMWWNK0kdl:,'.....''',,,;;;;;;;;;;;,,,''......,,;cldk0XWMMMWNWWWMMMWWWNWWO:'.',;,'...,kWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWNKkoc;'...',,;;::clllloooodddddooooooollcc::;;,''....,:ldOXNWWWWWWWWWWWW0;..;xKXKx;..,kWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMWXOxl,...',;:clloooddooooooooooooddddooddddooooooooolc:;,''..';cd0NWNNWWMMMWx,..oNMWWXl..,OWWWNWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWN0kl;',;;;;clooodooddooooooooddooooodddddddddddddddddddddddolc:;,'..':okKNWWWWW0:.',oO0Oo,..cKWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMMWWWWWXkl,,,',clddooooooooooooooooooddddxxkkkkkOOOOOOOOOOOOOOOOOOkkkkkkxdlc;'..';okXWNWW0c'..'''..'l0WWMMMWWWWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXko:;,,:cldxxddooooddoooooddddxxkkOOOOO000000000OOOOOOOOOOOOO00000OOOOOOkdl:'..':d0NWWNOc'...'cONWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNWNKx:'.,;codxxxxdddoddooooddxxkkOO0000OOOOOOOO0000OOOO00000OOOOOOkkkkxxxxxxdxxxdo:,'..,lkX0o;'.'lONWMMMWWWWWMMMWWWWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKd;..',:odddddddddddooddxkOOOO00OOO00OOOOOOOO000OOO000OOOkkxxxddddddoooooooooddoodol;'..':,..'cONWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWNNWWMMMWWWNKd,..';cooooooooooooddxxkOO00OOOOOOOOOO0OOOOO0OO00OOOkkxxddooooooooooooooooooddoooooodd:......;kNWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXx:',,;coddodoooddoodxkOO00OO00OOOOOOO000OO00O00OOOkxddddoooooooooooooooooooooooooddxxkkOx:.....'cONWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWNOc,,,:lodoooooddooddxOO00OO00000OOOOOOO0OOO00OOkkxddoooooooooodooooooooooooooooodxxkOOOOOO0koc,,'..,lKNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXd;',;coddoddooododxkO000O0OOOO0OO00OOO0OO00OOkxddooooooooooooddodooooooooooooddxkOOO00OOOO00O0Odol;''':kNWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWNWNWW0c,,,:oddddoooooodxkO0OO0OOOOOOOOO00OOOOOOOkkddoooooooooooooooooooooooooooodddxkOOOOOOOOOOO00O0Oxdodoc;,';dXWWNWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWNx;',;cddoddooddodxkO00OOO0OOOOOOOOOOOO00OkxddooooooooooooooooooooooooooooodxkkO00OOOOOOOOOOO0OOOkdooddddl,',c0NWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMXd;'';lodoodooodddkO0OO00OOO00OOOOOOOOOOOkxdooooooooooooooooooooooooooooddxkOOO00OOOOOOOOOOOOOOOOkdddddddxOo,..;kWWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWXo''';loodoooooodkOO0OOOOOOOOOOOOOOO00OkxdoooddooddoooooooooooooooooooddxkOOOOOOOO0OOOOOOOOOO0O0OkddddddddkOkl,'.,xNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWNWWWMMMWXl''';loooooooodxkOO000OOOOOOOOO00OOOOkdooddodoodddodddoooooooooooooodxkOO00OOOOOOOOOOOOOO000OO0OkdddddddddxOOkl,..,xWMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWXo,'';oooodoooddxO00OO000OOOOOOOOO00OxdoddoolcloodddddddooooooooooodxkOO00000OOO00OOOOOOOOO00O0OOxddddddddodkOOOxc,'.,kWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWWNd,',;lddoooddodkO00OOO00OOOOOOOO0OOxdooooooc''',;cloddodooooooooddxOO00OOOOOOOOO00OOOOOOOO00OO0Oxdddddddddodk00Oxol,..;OWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWk,..,ldoddoooodkO0OOO00OOOOOOOOOOOxdooooooo:'.....',;:codooooooddkO00OOO00OOO0000OOOOOOOOO0OO00OxdoddddodoooxO00Okdoc'..:KWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWWWWM0:.',cddoodooodkO0OOOOOOOOOO0OO0Okddodooddo:'..;oo:,'..',:cldddxkO00OO00OOOOOOOOOOOOOOOOOOOOO0OkddddoooooooodxO000Oxoo:'.'oNWNNWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWNo'.':ooodoooodkOOO0OOOOOOOOOO0Okxdoooooodo:'..;x00Okdl;'...';cdk00OO0OOOO0OOOOOOOOOOOOOOOOO00Oxdddddoooooooodk00OOOxool;..,kWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWWWWMMMWO,..,ldooddoodxO0OOOOOOOOOOO00Oxdoooodoodo:'..;x00O00O0Oxo;'...';ldkOOOOO0OOOOOOOOOOOOOOOOOOOkxddddddooooooodxOOOOOOxdooc'..cXMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWNo..':ooooooooxO0O00O00OO0OO0Okdoooooooodoc,..,dOOO00OO0O0k:'.'''..',:lxOO0OOOOOOO000OO0OO0OOxdddddoooooooododk0OOOOOkoodo;'.,kWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWNNW0;..,ldoodododkOOO0OOOOO00OOOkdooooodooddl,'.'lOOOO0000O0k:..';lc:;''..';cdkO0OOOOO0000000OkdoooooooooooodoodxOO0OOOOkooooc'..lXWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMM
WWWWWWWWWWWWWWWWWWWx'.':odoodoodk0OO00O0OO00OOOxdoodoooooddo;..':oddxkkkOOOkc'.';ooooolc;,''.',:oxOOOO0OOOOOOxdooooooooooooodooxO00OOOOOkdoddl,'.;0WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMNo..'coododooxO0OO0OO00000Okxooooooooooooc'..;ooodoooddddc'.';loooooodolc:;'...';lodkO00OkdooooooooooooooooodkOOOOOOOOxooooo:'.,kMWWWNWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWKc..,loodododkOOOOOOO00O0Okdddooooooooodl,..'cddoooodoooc'..,loooodoooooooolc;,'...';codddooddoddoooooooododkO0OOOOOOOxodooo:'.'dWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWNW0;..,loododoxOOOOOOOOO00Okdoodoooooooooo:'..;odddooooodl,..'cooooooooooooooooooc:,,''..',:cooddoddooddoooodxO0O00O0O0Ododoooc'..lNMMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWO;..;oooooodkOOOOOOOOO00kdodoooooooooddl,..,lxddddooooo:..':oooooooooooooooooooooollc;,'..',;clooooodoooooxOOOO00OOO0kdoooodc'..lXWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMO;..;odoooodk0OOOOOOO0Okdoodoooooooooooc'..:kOOOkkkxxxl,..,loooooooooooooooooooooooooolc:,'...',:loodooooxO0OOO00OO0Oxooooodc'..lXWWWNWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWMO;..;odooooxO0O00OO00Okdodooooooooooooo;..'oOOOO00000Ol'..:oooooooooooooooooooooooooooooool:;,'..',;clodxk0OOO000OO0Oxooooodc'..lXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWNW0;..,ldooooxOOO00OO00kxooddoooooooooodl,..,x0OOO00OO0k:..,cooooooooooooooooodoooooooooooooooooc;,''..';cdO00OOO00OO0kdooooodc'..lXWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWKc..,ldooodkOOOO0OO0Oxooooooooooooooodl'..:k0OOO00OO0d,..;loooooooooooodoooooooollloooooddoooooool:;,'..';cdkO00OO0Oxddooooo:'..dWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMNo..'coododk0OOO0O0Okdoddoooooooooooodc'..ck00OO00OO0o,..;ooooooooooooodoooooc:,''':ooooooddoooooddolc:,'..',:lxkO0kdooodooo;..,kMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWx'..;oooodk0OO00O0kdoooooooooooooooodl'..cO00OO00OO0o'..:oooooodddoooooool:,'.....:oodooooooooooddoodool:;''..';loddooododl,..:0WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWNNW0:..,ldoodkOOO0OOOxoooooooooooodoodxOo'.'cO0OO0000O0o'.':ooodddddddoooooo;........;ooooooooooooooooooooooolc;,'..'';:looooc'..lXWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWNo'.':ooodkO0OO00kdoooooooooooooodkO0o'..cOOOO00OOO0o'..;oooddddddddooool;......',coooooooooooooooooooooooooool:;''..',;cl,..,kWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWO;..,ldodk00OO0OxooooooooooddodxO0O0d,..:k0O000OO00d,..,lddddddddddoooool;,''',:looodooooooooooooooooooooooooooolc;,'..''...cXMWWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWMMWWNo'..:oooxO0OO0kdoooooooooooodkO0OO0x;..;x0OOOkkkxxo;.',ldddddddooooodoooollllooddooooooooooddooooooooooooooooooooooc:,'...';oOXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWWWWMK:..'cooxO0OOOxooooooooodoodkOOO0O0k:..'lxdddoooodo:',':dddddoooooooooooooooooooooooooooooooooollooooooooooooooooooooolc;,'..';lxKNWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWO,..,lddk0OOOdoooooooooddxO00OO0OOOo'..;oooodoooddo,',;looooooooooooooooooooooooooooodoooolc:,',looooooooooooooooooooooolc:,'...,cdOXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWWNx,..;ldk0OOkdooodooddodkO0OO0OOOO0x;..,ldoooodddddc''';loooooooooooooooooooooooooooooool:,'.'.'coooooooooooooooooooooooooool:;,'..';lx0XWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWMWWWWNo'.';lxO0OxodooodooodkO0OOOOO00O0Ol'.':ododddddddd:..':ooodoooooooooooooooooooooodoooc,....'.'coooooooooooodooooooooooooooooolc:,''..,cdOXWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWXo'.';oOOOxooodddoodkO0OOOOOOOOO00x;..'cdddxxxkOOOx;..':oooooodooooooooooooooooooooooc,....'.,loooooooooooddooolccloddoodooooooool:;,'..';oxKWMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWXo'.';dOOxddoodooxk00OOOOOOOOO0OO0o,..;xOO000000OOx;..':looodooooooooooooooooooooooooc,'''';cooooooooooooool:;''';odooooooooooooooolc:,'..';ld0XWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWWWWMMNd,..,dOxooooooxkO0OO0OOOOOOOOOO0Ol'',ck0O00OO00OOx;..';loodoooooooooooooooooooooooooolclloooodoooooooool;'''.'.,looodoooooooooooooooolc;,,'.':okKNWWWWMMMWWWWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWNk;..,ldodooodkO00O00OOOO00OOOO0Ox:,,,lk00OO000OO0kc'.',cooodooodoooooooooooooooooooooooooooooooooooooo:..'..'.;ldoooooooooooooodoooddddc,,,'..',cd0XWMWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWNNWWW0c'.';lodddk00O0OO00OOO00OOOkxxdl:,''ck0OO000OO00Oo,'.';loooooooooooooooooooooooooooooooooooooooooooo:'.'...':ooooooooooooooooooooddoc,,',loc;'..':okKNWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXd,..':odkOOOOO0OOOOOOOkxxdoddddo:'.':kOO0OOO0OOOOx:'..,:loooooooooooooooooooooooooooooooooooooooooooc;,,,;cooooooooooooooooooooool:,'';dOOOkdl;'..',cxKWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWNNN0l'..,lk00OOOOOOOkkxddodoooodddo:'..;dOO00OOO00O0Od;.'',:loooooooooooooooooooooooooooooooooooooooooooooooooodoooooooooooooooooo:,'',cxO0OOOO0Oxo:'.'.cXWWMMMWWWWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNk:'.';okOOOkxxxddoooddooddooooo:''',lkO00O0OO0OOxoc,'..,:loooooooooooooooooooooooooooooooooooooooooooooooodooooooodddddooooc;'.',lkOOOO0OO0O0Ol'..;kNWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNWWXx:'.';lodddddddxdddddoooooooooc,'.':xOOO0OOkxdoodoc,'..';clooooooooooooooooooooooooooooooooooooooooooooooooooodddddddddl;'..':lddxO0O0OO0Ok:'..:0WMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXx:'..,coddddddxxddooddddddxxkxc,..,lkOOkxdooooooooc:,..',;clooooooooooooooooooooooooooooooooooooooooooooooodddoodoolc;'.';looooodxOOOOOd;..'lKWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWXkc'';;;lxkkkkOOkkkkOOOOOOOO0Od:'..,ldoooooodoooddool:,..',;clloooooooooooooooooooooooooooooooooooooooooodxddodoc;,;;;;loooooodoodxkkc'..;xNMWWNNWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWN0dc;,,:loxOOOOOOO0OO000OO0O0Oo;'..,cooooodooodxkO0Oxl:,..''';:cloooooooooooooooooooooooooooooooooooooodxxolc;,,;coxkxdddoooooodoc;'.'l0NWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWXOdc;,;:cllodxxxxxkkkkkkkkkkxc,..',:lodooodkOO00OO0Oxoc;,'..',;:clooooooooooooooooooooooooooooooooollc::;,;:lxO000Okddooooooc;'..;kNWNNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXOdc,''',;:clooddoooooodddooc,'..';lodxOOOOOO00OO00Okxdl:,'..'',;:clloooooooooooooooooooooollc:;,'.',:ldk0000O000Okxddol;'..,oKWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMWXOdc,'..'',;:clloodddooooooc;'..';lxOOO000OOOOO00OOOOOkdl;,'....'',;;:::ccclllccccc::;;,,''..',:loxO0OOOO00OOOOOOxl;''.,l0NWWWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXOdl:,'..'',,;::cclllooooc;,'..,:okO0OO00OOO0OOOOO0Oxdolc:;;,'''......''''''''....'',,;;:oxO0OOO0OO00OOO000Od:'.',lONWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNXKOxoc;,'.....''',,,,,,''....',:oxO00OOOOOOOOO0kdooooddoolodolccc::;;;;:::c::clloddodxkO00OOOO000OO0Oxl;'.',o0NWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXKOkxdolc:;;,,'''''''''''..,:ldkO000000OOxoodooodoodk000O0OOOOOOOOOO0OxddddddoodkOOOOOOO000Oko:,..':dKWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWWNXKK00000000000kl;'..';:odkOO0OkdoodododooxO00OO0OOOOOOOO0000kxdddddooodkO0OO00Oxo:,..',lONWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXOdc,'..',;:looooddoddoodk000O00O00OOO000000OxdoddoooooxOOOxdc;,..',lkKNWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNNWMWXkdc,'...'',;:clooodxO0OOO00OO000O0000O00xdoddddoolllc;,...':lkXWMWNNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNKOkxl:,'..'',,;:codxkkkOOO00000O00OOOxolcc:;;,''...':lx0NWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
MMMWWWWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWWWWMMWWWWNXKOxoc:,'.....',,;;:cccccccc::;;;,'.....',:ldk0XNWMMMWWNWWMMMWWNWWMMMWWWWWMMMWWNWWMMMWWNWWMMMWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNKOkxolc:;,,,,'.','....'',,;;:lodkOKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
NNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMMWWNWWMMMWWWWWNXK000OkOOOkkkOO0KKXXNNWMMMWNNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWWNWWMMMWNNWWMMM
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

Index

intro

Problems

Practice

這頁真是做的可有可無

這句也是

這句也是

這句也是

這句也是

這句也是

這句也是

intro

What's reverse?

normal engineering

machine
language
assembly
language
High-level programming language
global start

section .text

start:
    mov     rax, 0x2000004  
    mov     rdi, 1          
    mov     rsi, msg        
    mov     rdx, msg.len    
    syscall                 
    mov     rax, 0x2000001  
    mov     rdi, 0          
    syscall
section .data
    msg:    db  "Hello, world!", 10
    .len:   equ $-msg   

fn main()
{
    println!("hello world!);
}









compile

(編譯)

assemble

(組譯)

reverse engineering

machine
language
assembly
language
High-level programming language
global start

section .text

start:
    mov     rax, 0x2000004  
    mov     rdi, 1          
    mov     rsi, msg        
    mov     rdx, msg.len    
    syscall                 
    mov     rax, 0x2000001  
    mov     rdi, 0          
    syscall
section .data
    msg:    db  "Hello, world!", 10
    .len:   equ $-msg   

fn main()
{
    println!("hello world!);
}









decompile

(反編譯)

deassemble

(反組譯)

to know how program work

Analysis Methods

Stastic Analysis

Dynamic Analysis

only analysis code

analysis code while program actually running

Stastic Analysis

Dynamic Analysis

{​Reverse}

  • 先分析(不用執行 相對安全)

  • 程式不能跑

    • ​惡意程序 跑了有危險

    • 壞了 跑不動

  • 太複雜:難跑所有執行路徑

  • 有delay/定時:要等很久

  • 有一些執行條件太苛刻

  • 後分析(要執行:怕有危險)

  • 依賴特定輸入

    • ​使用者輸入、網路、隨機數

  • 代碼經過混淆(複習crypto)

  • 依賴環境

    • 離開測試用虛擬機才會發作的病毒(wannacry)

{​Reverse}

  • Reverse Engineering 逆向工程

  • 從成品 分析其設計原理
    • 結構、流程、演算法、程式碼 做逆向拆解分析
    • 應用:軟體破解、漏洞挖掘、惡意程式碼分析​​
  • ​yt推薦:

{​Reverse}

  • 好康的:

    • ​破解一堆程式(西瓜沒有教 絕對沒有教)
    • 增進寫code的debug效率/經驗
    • 檢查程式有沒有 惡意代碼  漏洞

{​Reverse}

  • 經常用到的能力

  • 各種程式語言:
    • python 編寫解碼程式
    • C++ (ida等逆向工具的逆向結果都是C++)
    • 組合語言​
  • 熟悉逆向工具、反推、debug
    • 動態分析:ollydbg,X64dbg
    • 靜態分析:ida
  • 耐心:讀程式碼很躁 但是讀久了自己寫起來也會進步
  • 只教軟體的部分的部分 電路逆向我也不會阿阿

{assembly}

{​assembly}

  • assembly 組合語言(汇编语言)

  • 屬於低階語言 語法內容單純

    • 直接對CPU的暫存器(register)操作

      • 效能較好

      • 機器依存性:(Machine-dependent)

        • 用不同指令集的CPU無法直接移植code

    • 機器語言:屬第一代低階語言 直接用1、0操作 可讀性低

  • 用 簡短字串 取代機器語言

  • 經過組譯器轉成CPU指令集(0/1)

{assembly}

Processer
Instruction Set

assembly

組合語言

指令集

處理器

{Machine-dependent}

Processer
Instruction Set

assembly
Processer
Instruction Set

assembly
Processer
Instruction Set

assembly

A

A

A

B

B

B

{​指令集}

  • 叫CPU做事情的指令們

  • ​複雜指令集(ex:x86)

    • ​​一指令包含>=1個動作(ex:add = add + mov)

      • ​減少代碼量 省RAM

      • 每個指令執行時間不同(指令無法同步執行)

      • 加上轉譯層可以轉成精簡指令集

    • 精簡指令集(ex: arm powerPC(現多用於遊戲機))

      • 產生背景:編譯器優化 C++出現 RAM變便宜

      • apple開發的Rosetta 2可以x86->arm

  • 指令集架構的故事(影片) 

{​x86}

  • intel開發8086cpu時做的指令集

  • 做的太成功了 所以以後的cpu都叫80x86好了 (x∈Z)
    • 所以指令集都選擇要兼容它
  • 複雜指令集
  • 最常見的指令集

{Registers}

{​Register}

  • Register 暫存器

  • CPU 中一種極快的內部記憶體
  • CPU可以直接操作的記憶體 其他都要從 ram/硬碟運送過來
    • 容量:Register < RAM < Disk
    • 速度:Register > RAM > Disk
  • ​暫存器大小(以A為例)
  • RAX:64位
  • EAX:32位
  •   AX:16位
  •   AH:8位(高)
  •   AL:8位 (低)

{​Register}

  • Register 暫存器

  • ​常見暫存器
    • 通用暫存
      • ​​AX:存 計算結果 最常用
      • CX:迴圈計數器
      • DX:輔助計算(例:除法餘數 乘法進位等等)
    • 非通用暫存器-Pointer(指標:指向位置)
      • EIP/RIP:紀錄目前執行的位置
      • ESP/RSP:呼叫堆疊最上面函數的的頂端
      • EBP/RBP:最上面函數的底端

{​Register}

  • Register 暫存器

  • ​常見暫存器
    • 非通用暫存器 - Flag(旗幟:表示狀態)
      • ZF(Zero Flag):運算結果是否為 0。
      • CF(Carry Flag):是否發生進位或借位。
      • OF(Overflow Flag):是否發生溢位。
  • 表示法(以rax做舉例)
    • rax:表示rax指向的位置儲存的值
    • [rax]:表示rax的位置

下一條指令位置

表示資料大小

奇偶性

正負號

字串方向

{Sections}

devive ELF files

{Sections}

Section Introduction
.bss Uninitialized data
.data Initialized data
.rodata Read-only data
.text Executable instructions, e.g. main function
.init Runtime initialization instructions
.fini Runtime finalization instructions
.plt PLT, Procedure Linkage Table
.got
GOT, Global Offset Table
etc. just google when encountered

{x86 syntax}

填大坑

{x86}

  • 欸不是你們認真要聽嗎

  • 我覺得全講你們會睡死

  • 有些略過 遇到自己看

{Common}

;註解

;mov a,b 把b值移到a暫存器
mov rax,0x00 ; rax = 0x00

;資料大小 ptr 位置 =>從<位置>開始讀入<資料大小>個資料

mov bl,byte ptr [rax] ;

;lea = Load Effective Address
;像mov 但傳的是指標
;可用於陣列(陣列變數就是存他的起始位置)
lea rax, [address] ;lea register,pointer

lea ax, word ptr [ebx] ;如果 ebx = 0x12345678 , ax =  0x5678
lea rax, c ;如果有一個 c 的變數 rax = c的位置

nop ;no operation

{Arthmetic}

inc rax ;rax++
dec rbx ;rbx--

add rax, 0x87 ;rax += 0x87
sub rbx, 0x69 ;rbx -= 0x69

mul cx ;ax*cx (ax is set by defualt)
	   ;actually: dx:ax = ax*cx (in case of carrying)
       
div cx ;ax = ax % cx
	   ;dx = ax / cx

{Bitwise}

and al,0xFE ;&=

or al,0x1   ;|=

xor al,0x87 ;^=

not al

neg al      ;2's complement of al

{Bitwise}

{Bitwise-2}

shl rax, 4 ;rax = rax << 4
shr rbx, 2 ;rbx = rbx >> 2

rol rax, 2 ;rotate left
ror rax, 2 ;rotate right

{Bitwise-2}

{cmp rax,rbx}

  • vleft = vright

    • ZF=1 ; CF=0

  • vleft > vright

    • ZF=0 ; CF=0

  • vleft < vright

    • ZF=0 ; CF=1

{jmp address}

{jCC}

jump condition code

JC Jump if carry
JO Jump if overflow
JP Jump if parity
JS Jump if sign
JZ Jump if zero
  • 呼叫:讓程式執行直接跳到指定行

  • 語法:
    • call address(位置)
  • 移動到指定的地址
  • 執行函數的時候會用到

{call}

{call address}

{example}

#include <iostream>
int add(int a,int b)
{
        int sum = a+b;
        return sum;
}
int main()
{
        printf("%d",add(1,2));
}
0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret
0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret

把1,2放進兩個暫存器

呼叫print

呼叫上面那個函數

stack frame

把輸入的相加

結束

stack frame

stack frame

0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret

把1,2放進兩個暫存器

呼叫print

呼叫上面那個函數

把輸入的相加

結束

stack frame等等教

0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret

把1,2放進兩個暫存器

0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret

把1,2放進兩個暫存器

0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret

把1,2放進兩個暫存器

0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret
0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret
0000000000001139 <_Z3addii>:
    1139:       55                      push   rbp
    113a:       48 89 e5                mov    rbp,rsp
    113d:       89 7d fc                mov    DWORD PTR [rbp-0x4],edi
    1140:       89 75 f8                mov    DWORD PTR [rbp-0x8],esi
    1143:       8b 55 fc                mov    edx,DWORD PTR [rbp-0x4]
    1146:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
    1149:       01 d0                   add    eax,edx
    114b:       5d                      pop    rbp
    114c:       c3                      ret

000000000000114d <main>:
    114d:       55                      push   rbp
    114e:       48 89 e5                mov    rbp,rsp
    1151:       be 02 00 00 00          mov    esi,0x2
    1156:       bf 01 00 00 00          mov    edi,0x1
    115b:       e8 d9 ff ff ff          call   1139 <_Z3addii>
    1160:       89 c6                   mov    esi,eax
    1162:       48 8d 05 9b 0e 00 00    lea    rax,[rip+0xe9b]        # 2004 <_IO_stdin_used+0x4>
    1169:       48 89 c7                mov    rdi,rax
    116c:       b8 00 00 00 00          mov    eax,0x0
    1171:       e8 ba fe ff ff          call   1030 <printf@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       5d                      pop    rbp
    117c:       c3                      ret

Disassembly of section .fini:

0000000000001180 <_fini>:
    1180:       48 83 ec 08             sub    rsp,0x8
    1184:       48 83 c4 08             add    rsp,0x8
    1188:       c3                      ret

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

程式運行=stack堆疊

Stack:只能從上面拿
FILO:first in last out

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

程式運行=stack堆疊

Stack:只能從上面拿
FILO:first in last out

IP
Instruction Pointer

main()

RSP

RBP

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

程式運行=stack堆疊

Stack:只能從上面拿
FILO:first in last out

IP
Instruction Pointer

main()

RSP

RBP

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

程式運行=stack堆疊

Stack:只能從上面拿
FILO:first in last out

IP
Instruction Pointer

main()

RSP

RBP

a()

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

程式運行=stack堆疊

Stack:只能從上面拿
FILO:first in last out

IP
Instruction Pointer

main()

RSP

RBP

a()

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

程式運行=stack堆疊

Stack:只能從上面拿
FILO:first in last out

IP
Instruction Pointer

main()

RSP

RBP

a()

b()

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

程式運行=stack堆疊

Stack:只能從上面拿
FILO:first in last out

IP
Instruction Pointer

main()

RSP

RBP

a()

b()

{Stack frame}

function a()
{
        b();
};
function b()
{
	//do nothing
};
function main()
{
        a();
};

程式運行=stack堆疊

Stack:只能從上面拿
FILO:first in last out

IP
Instruction Pointer

main()

RSP

RBP

a()

{Stack frame}

hidden

{control flow}

condition:if-else

{control flow}

condition:if-else

rbp丟到stack

{control flow}

condition:if-else

rbp = rsp(下=上:沒東西)

rbp = rsp(下=上:沒東西)

{control flow}

condition:if-else

rsp上移:留空間給main

{control flow}

condition:if-else

scanf():讀入函數

{control flow}

condition:if-else

test a,b

ZF = A and B

只有a=b=0時
ZF = 0

{control flow}

condition:if-else

Jne 到1189那行

{control flow}

if zero

{control flow}

if not zero

{control flow}

loop:for/while

迴圈內容

判斷

{control flow}

loop:for/while

{control flow}

loop:for/while

{control flow}

loop:for/while

{control flow}

loop:for/while

迴圈

判斷

think about it

How about do-While loop?

{​assemblyinc++}

  • 其實c++裡面也可以直接執行組合語言

  • 在c++裡面放__asm{ ... }...塞組合語言

  • 所以你可以用很麻煩的方法寫a=b

{Kali linux}

{Kali linux}

如果大家都裝好我就跳過ㄌ

{Disclaimer}

請勿以任何測試或學習名義在現實環境進行攻擊
觸犯法律者之行為,講師/電研社不負任何責

{Kali OS?}

Kali Linux is a Linux distribution designed for digital forensics and penetration testing.

It is maintained and funded by Offensive Security.

The software is based on the Debian Testing branch: most packages Kali uses are imported from the Debian repositories.

copy from wikipedia

NOT FOR BEGINNER

{Installation}

Virtual box: 

(i hate vmware)

 

Kali:

 

{Settings}

Virtual box: 

(extension)

{Settings}

Virtual box: 

(wifi)

{Settings}

Virtual box: 

(wifi)

Fool-proof teaching​==

DONE

kali

{deCompliers}

{Ida Free}

{​Ida}

  • 幾乎是最好的反編譯器

  • 支持插件(Pro) ex:
    • IDAPython:寫出自己的腳本 自動化分析
    • FindCrypt:加密法相關
  • 版本
    • ida pro:要錢
      • 本體許可證(1975USD)+任一指令集架構(2765USD)
      • 貴到炸開 => 揪團買 or 🤫🤫
    • ida free:免錢
      • 版本較舊 不支援插件 但對新手小白很夠了
      • debugger只支援安裝的系統的執行檔
        • 裝在windows:只能跑.exe / .dll
        • 裝在linux:只能EIF

free版本的限制

Sugar daddy buy me IDA Proo(≧口≦)o

{Installation}

{Basic usage}

  • F5:反編譯

  • Ctrl + 放大 ; Ctrl - 縮小

  • n:變數重命名

  • \:隱藏轉換(ex:dword之類)​

  • /:註解
  • ​shift+F12:顯示string頁面

  • Ctrl-F 尋找

{​ida-開啟檔案}

直接點開這女的

{​ida-開啟檔案}

直接點開這女的

{​ida-開啟檔案}

直接點開這女的

開新的

點之前開過的

{​ida-開啟檔案}

通常會自動辨認格式(不用動)

讓他分析

{​ida-開啟檔案}

程式流程圖

所有會用到的

函數

按F5反編譯
(筆電可能要檢查FN)

轉16進位

導出之內容

導入之內容

{​ida-開啟檔案}

偽代碼
(pseudocode)

tab切換其他欄

code好小
<Ctrl + >放大

反編譯完會出現偽代碼(類似c++)d

{​ida-開啟檔案}

Shif+F12 檢視

string

(跟前面講的strings命令差不多)

{Ghidra}

free & open source

不想付錢然後想深究逆向可以用

{Objdump}

objdump -M intel -d program_name

直接反編譯執行檔成組合語言

{debugger}

for dynamic analysis

{x64dbg}

open source windows debugging tool

{​x86dbg}

  • 免費 開源 用於windows

  • 另一個選擇:Ollydbg
    • 只能debug 32位執行檔
    • 作者已經停止更新
  • 可以選擇安裝/免安裝版

/release/x96.exe

免安裝版本

32位元/64位元

安裝

{​x86dbg}

  • 跟C++在debug差不多
  1. 執行(F9):繼續執行到斷點/故障/結束
    Ctrl+F9: 執行到函數返回處
  2. 暫停(F12)
  3. 單步步入(F7):
    ​ 執行該行 跳到下行 有function會跳進去
  4. 單步步過(F8):
     執行該行 跳到下行 function會當作一行跳過去 不會進入
  5. 跟蹤步入(Ctrl-Alt-F7):
     類F7但會跑到外部函式庫
  6. 跟蹤步過(Ctrl-Alt-F8):F8+跟蹤
 

1.

2.

3.

5.

4.

6.

{​x86dbg}

  • 常見技巧1-從checkpoint強制跳轉

  • 情況 有一個解碼function沒有被呼叫(例題)
  • 從ida找到main function跟關鍵function的地址<addr>
  • 法一:
    • 在main function裡面設定斷點(按紅點)(ctrl-G 跳指定位址)
    • 修改eip到addr
  • 法二:用x86dbg直接修改組合語言
    • 在main function中找一行直接改成jmp addr

{​x86dbg}

右鍵要改的行

{​x86dbg}

按組譯改assembly

{​x86dbg}

記得要有0x(hex)

{​x86dbg}

記得要有0x(hex)

改過了

{​x86dbg}

  • 常用技巧二-if判斷跳過

  • 較簡單的序號破解就這樣搞的
  • 靜態分析找到if判斷位置
  • 修改成直接跳過去

Stastic

Analysis

{​file}

  • 辨識文件類型

  • 大致上知道檔案類型
  • 用法:file 檔案名稱
  • 拿到文件第一個要做的事情
    • 以防惡意文件
      • ex:forensics講過的冒充文件(RLO)

{file}

Example:

┌──(kali㉿kali)-[~/Desktop/test]
└─$ file target
target: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), 
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, 
BuildID[sha1]=d7b296368a701ecb103ee1dd86eee4c61a31cfe5, 
for GNU/Linux 3.2.0, not stripped

{Commands}

  • strings

    • ​印出所有可列印字串(ascii 32-126)
  • strace

    • 追蹤程式進行時的 call 跟 signal
    • kali 沒有內建: sudo apt install strace
    • extend:file descriptor
  • grep

    • ​中文:正則表達式
    • usage:grep 正則表達式
    • practice
    • combo(?):strings filename | grep flag{

{strings}

{grep}

{CTF}

{FQA}

  • zsh: permission denied:

    • $chmod u+x filename

 

Thanks for listening

CTF-Reverse

By idoit_melon

CTF-Reverse

  • 212