Profile

머리정리하는곳

c2w2m2

간단한 Arm 리버싱

진짜 간단한 첫 arm 리버싱이다. #include int test(int idx){ printf("In test%d\n",idx); } int main(int argc, char *argv[]){ int i; printf("In main\n"); for(i=0; i

Reversing ·

[CodeGate] RamG

오랜만에 리버싱입니당. 리버싱도 안하니까 슬슬 좀 그래서 오랜만에 하나 잡아봤습니다. 먼저 대충 까봐도 4번에 시크릿 메뉴가 있다는 건 알 수 있고, 이때 1번메뉴는 그냥 출력, 2번 메뉴가 뭔가를 하는 메뉴이기에 분석해 보겠습니당. 쭉 보면 stage 형식으로 5개를 깨면 뭔가 파일을 드랍합니다. 그러니까 일단 stage 부터 깨보져 1 스테이지 입니다. 입력받은걸로 xor 해가지고 v40 이랑 비교합니다. 그냥 xor 역연산 해주면 뚝딱. (작은 코드니까 gist 안올릴게여) enc = 'MVYLXYUARJ'key = '47459' for i in range(10): print(chr(ord(enc[i]) ^ ord(key[i%5])),end='') 이런걸 돌려주면 stage1 key를 얻게 됩니당...

Reversing ·

[???] cuty

친구가 준 리버싱 문제이다. 푸는데 2분 걸렸따 ㅎㅎ... 포스팅 요즘 너무 안올린거 같아서 이런문제라도 올려봅니다 ㅠ 루비 난독화라는데 열어보면 엄청 난잡하다... 사실 저걸 다 계산해서 코드를 구해낼 수 도 있겠지만 이런식으로 실행되는걸 보고 저걸 실행시켜놓은 상태로, gdb 로 attach 해서 스택을 보면 디코딩된 코드가 나오겠지 라고 생각해서 쉘 2개 띄워놓고 한쪽 실행시켜놓고 한쪽에서 pid 알아내 attach 하고 스택 어디에 있나 해서 find "nono" 했는데 띠용... 코드 보고 분석까지 해야될줄 알았는데 플래그도 같이 줬따. 이게 스택에 있는 코드

Reversing ·

[Reversing.kr] Replace

리버싱 실력이 조금 딸리는거 같아서 reversing.kr 문제를 풀어보려 합니다.먼저 Replace 를! 시작하면 요런 인풋창이 뜨는데 뭔가 인풋을 넣으면 꺼져버립니당...그러니 디버거로 살펴봅시다. 프로그램이 제대로 보이는 부분입니다. 미리 주석도 좀 달아 놨는데 저기 있는 get input 부분이 유저의 인풋을 받고 4084d0 에 저장합니다. 그리고 그 밑에 함수를 보면 이런부분으로 오는데 4084d0 에 저장된 값을 +1 합니다. 뭐 그렇게 해서 함수가 끝나는듯이 보이고 그 밑에 jmp 로 들어가면 이런곳에 오는데 여기서 F8 을 조금 더 눌러보면 이런 부분에 옵니다. 여기서 에러가 발생하는데 지금 eip 에 있는 부분에 있는 코드를 보면 eax 에 저장된 주소의 가서 NOP 을 채우는것으로 보..

Reversing ·

[DIMICTF2017] ToHard

이랬던 문제인뎅.. 푼 사람들이 8분컷 냇다 해서 해봤습니다. angr 라는게 있다고 해서 이걸 써서 해봤습니다. import angr def main():p = angr.Project("ToHard",load_options={'auto_load_libs': False})ex = p.surveyors.Explorer(find=(0x00400AD8, ), avoid=(0x00400AF0, ))ex.run() return ex.found[0].state.posix.dumps(0) if __name__ == '__main__': print main() 이런식으로 코드 짜고 실행해 봤더니 엥.... 대회때 조금만 일찍 알았어도 ㅠㅠ

Reversing ·