제목처럼 간단한 리버싱 문제
아무런 설명없이 파일만 덩그러니 주어진다.
Easy.zip 파일 압축을 풀어보면
Easy 라는 이름의 파일이 들어있다.
리눅스 환경에서 file 명령어를 통해
어떤 파일인지 확인할 수 있다.
ELF 파일이라고 나오는데
ELF는 리눅스에서 실행가능한 실행파일이다.
한번 실행시켜 봤더니
실행하자마자 Try harder!! 라는 문구가 나오면서
프로그램이 종료된다.
IDA라는 디스어셈블러를 이용해 Easy 파일을 열어
main 함수의 수도코드를 살펴보았다.
가장 먼저 보이는 조건문에서 argc가 1인지 확인을 한다.
여기있는 argc는 argument의 갯수를 의미한다.
아까처럼 ./Easy 라고만 실행하면 argc 는 1이 되어서 Try harder!! 가 출력되고 끝나는 것이다.
argc의 갯수를 늘릴려면 ./Easy hello 이런식으로
띄어쓰기 후 argument를 적어주면 된다.
이럴경위에 argc는 2가 된다.
이렇게 argc를 2로 만들어서 프로그램을 실행시켜 보면
첫번째 조건문을 통과해서 프로그램 실행 결과가 다르게 출력되는것을 볼 수 있다.
main 함수는 이렇게 뒤에 더 이어져있다.
내용을 보면 v8 배열에 알수없는 값들이 엄청나게 많이 들어가 있고
맨 아래쪽에 보이는 for 문에서 v8 배열을 가지고 뭔가를 만들어서
s 라는 배열에 집어넣고 있는 모습이었다.
일단 s배열에 어떤 내용이 들어가는지 보기 위해
위에 보이는 수도코드를 파이썬으로 그대로 옮겨서 실행시켜 보았다.
v8 = ["AFLdfgArTkdwelkfkmkasFFEWSWasCFsfsdfewRRWDSCFAWDHg","sddgrlksjpothjafkgpOEWFKQW0EOG9AWRI90VA8RUGWE9R8BIhDJFOIBSDF","SDSL,FKOKEIER0T9W85690843GJDKVJASFQLIGUQWO,ECLDskvjar,lgksjg1dflb","kjhKKHJLKlkjhlksriufer9erudskjhLKHJW3EROIWUEOIUkjkhsdllkejgrgpdffSljk","sdrdgkj4598fgjkksdffvggvljkt66yhpooijjKJWEROJISDOVIHEERGNoqiqwjedqwkd_jaasfefn","wewro3k34j4r39vjwewlkrfjwefoiasjALDLADSLFKWJEFWk23eqwqfweoryirut0h9dfbjlkwelkw1kj3e3f","xdlkjefwi9eru8239r2efjkldsvjlwk4g439berflklkjwff1982eiuqukKJSDFKJWEEF0OSDVJLKSKSLKJEFSJW0","098765432QWERTYUIOPASDFGHJKLZXCVBNM,W453948573498EWIFUERRGKHJFGBKDJGNBDDGksljgerogijdflkb_ckdfbj","dflfkgdjflgkjdflgsktjhworepgqajrlvLKLSADDKGJWREOGSJIFDLBKXDFGJBLKEKRTHHJOPSFGBJLSKFDGBJSLsdlfkdf4ldkfgj","DSLDFKGJWREGPOIWERJBSDFLKJBDFGLBKJklsdjff3948tueg98idduvvoierrguj0eer9gjgodfbbojiereoigsdfkgjdfdfdfdfdfNdb","dglkjerge9r0gwe9fwfoiuiSKDFJFWER9GDEORIJGDFOIBJRTOIBJDFOBIKJER90GGU3U3EGF09USEDGOISDFJGDOetewrtwertwfwFIJB_DF","XFLLKVJERGPERG9W8UER0G9SPUDFBOIIJDFOIIBSRT9BURERFBOIDFDBKSJDFBSDFOIBUJSFOIBJDDFLKLKBJSRT09HWRBBOJIDFJOIdfdfsdeffsdWOI","DFDVLKJWWEFF983R7239812IUEASDFKJSDKJSFrgsdfgsdfgsdfgsddRTOISIJFBDFKGJBDFOGOLNIJDdherethdrgbrffbPWRGQ98ETW98EFSIUDdfsd4fsdfVH","XDKXDJVER9847T398289341092E09EFUFDVJW5Rdfgdfg947T98EREGIUUDFVHJEE9R88TUEED99FVIUHJW9E8FFUQW039DID0CVIDKDFV0E9RUVE09UUJdsfsdfSsdfs","REZEVkxLSldXRUZGOTgzUjcyMzk4MTJJVUVBU0RT0lTSUpGQkRGS0dKQkRGT0dPTE5JSkRkaGVyZXRoZHJnYnJmZmJQV1JHUTk4RVRXOThFRlNJVURWSAsdfsdfsdfsdfysd==","3158117bae155dab40b42244b9554d0d92ad05e8f11d5fe22d3334b84fd3aa5b0289431069ae8757448ae6dfd61c8edasfsdfsdfsdefweoifusiodfjsdfdfsdfsdfsdf_sdfk","sdldfkerjguwoierfhjKJLJSDFHROIGEHVSDOIHkjsdhgeorighsdslvkndfljkbfjgbldhkfjghdflgkjsdfpogewrigwweroiojdflkvjdfklgdfjgdlfkgjdfgdlfSDFDRGERGDFRGEkj21","xlxdkfjddrgloeiut9348ut398gf3jur9gfeirjklefejlkKLSDSJGEORIGEJRGOIEJRGOEIRGJDLFKGDRGEIOWUERWEIORUWEksehj9f38ru239r2e9jf3948fj34oiferjgDRGSDFGDSFGSD3FGSDFGSDeoirjg","dfgldkjgw958yt3u4ro09eijusdikjhOSIDHFWW9E8FWOJEFSWJFDLKFDJskdgher49g383egijoigjerlgkejrglgeworigjwregvdfmvdfoigerugeoirjgrolgDFGDSFGSDFGSDFGSDFGSDFGWERTIWjidfdlkvvgdjfge0rg","dlkfjdflfkdfjfgjoi4353KSDJDHFW938RR23IFHWksdjdhgweoituweoigjeglksdgjdslkgjweoijdskvgjdfsklbjhdfgwoeireruqwopqiuyiuIUQWY293R23OIF23R9O32R2378R23IUR2H3sfsdfsdfsdfsdfsfsdfsdfs3dfsR","SDSFLKSDFLRKGJkjsdhfw933r823urowieruwoeitueoriteuergoidfjgdlfkgjeeroigerjgoijgvdlllllllllllllllllllkoerieurtoieruteroituDFSDFSDFSDFSDFSDFSDFSERTWEReeewereeeeeeorituwpoqwiposfkjsRld","fdghjkytrewqdfgbh9u8toiu4jrwefud98uvgijerkwefiudsvosoifjwrek3efoiusdvffijkewioiduvjekwiosdouvijsdfkelodsviudjsfqeudvs9oijfkiodvdknfdhewuwksam,m,.fgm,glkflkflkvoicxjdksedhsfvoijnfsdskehdvio","KSJDFHSIDFWEUIshf3w894efiowejknefioewuwghjkfkkdfkjvdfkdvbfiourifiuruifodrjifjoonvjfkiivojiodjdoivvjdfovdifjdvooooooooooooooooooooooooooooooooffijvdlfkvdjfl2329382@@@@@##$#$#$$%vdfkjvdlfkvj1df","lxkcvjdfolvekjvkldkfvjdlllllllllllllllkeowfiefwjeofwoejwfeeeeeeeeeeeeeeeeeeeeeeeeidjsdlvskdfjsdlkfjweoiweifjovdjivoeijrveorijverlkjelrbkkbjerlkejervl%$$%TRGEFGFHFGHFGHJFGHkvjeerlgjerovjervoerNijve","LKSDJFWKERJ329FWJEFLSSKDFJSDLKsksejfeh4foeiwrjverlg4jrtlgelkjSLKDFJGBRTORJTBLKDFJBE9RTG3U4GFWOIJjveroibjrthhjtie0orithrjtbrhoithjrotiwjer0oihgeirtDFGDFGDDFGWERGRETHRTYJR^TYUJTYJT%%oidjfgblektrjbelgrgkbjdfnglkjdflg"]
v7 = 0
s = ['J','I','S','C','T','F','{','','','','','','','','','','','','','','','','','','','','','','','','','']
for j in range(7,32):
if v7 != 0:
s[j] = v8[v7][len(v8[v7-1])]
if v7 == 0:
s[j] = v8[0][8]
v7 += 1
flag = ''
for i in range(len(s)):
flag += s[i]
print(flag)
변수명과 내용은 그대로 사용해서
파이썬 문법에 맞게만 고쳐 옮겨놓았다.
어떤값이 나오나 한번 실행시켜봤더니
바로 플래그가 출력되었다.
뭔가 좀 허무하게 풀린 느낌이다.
'CTF > 리버싱' 카테고리의 다른 글
[justCTF] That's not crypto - 리버싱 / uncomplye6 (58) | 2023.02.15 |
---|---|
[JISCTF] REV102 - 리버싱 / Uncompyle6 (60) | 2023.01.22 |
[PoseidonCTF] The Large Cherries - 리버싱 / IDA / Pwntool (48) | 2022.11.12 |
[2020CCE] Easyransom - 리버싱 / IDA / HxD / XOR (42) | 2022.11.04 |
[2020CCE] My Friend - 리버싱 / IDA / Python (56) | 2022.11.01 |