진짜 간단한 첫 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
오랜만에 리버싱입니당. 리버싱도 안하니까 슬슬 좀 그래서 오랜만에 하나 잡아봤습니다. 먼저 대충 까봐도 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를 얻게 됩니당...
친구가 준 리버싱 문제이다. 푸는데 2분 걸렸따 ㅎㅎ... 포스팅 요즘 너무 안올린거 같아서 이런문제라도 올려봅니다 ㅠ 루비 난독화라는데 열어보면 엄청 난잡하다... 사실 저걸 다 계산해서 코드를 구해낼 수 도 있겠지만 이런식으로 실행되는걸 보고 저걸 실행시켜놓은 상태로, gdb 로 attach 해서 스택을 보면 디코딩된 코드가 나오겠지 라고 생각해서 쉘 2개 띄워놓고 한쪽 실행시켜놓고 한쪽에서 pid 알아내 attach 하고 스택 어디에 있나 해서 find "nono" 했는데 띠용... 코드 보고 분석까지 해야될줄 알았는데 플래그도 같이 줬따. 이게 스택에 있는 코드
리버싱 실력이 조금 딸리는거 같아서 reversing.kr 문제를 풀어보려 합니다.먼저 Replace 를! 시작하면 요런 인풋창이 뜨는데 뭔가 인풋을 넣으면 꺼져버립니당...그러니 디버거로 살펴봅시다. 프로그램이 제대로 보이는 부분입니다. 미리 주석도 좀 달아 놨는데 저기 있는 get input 부분이 유저의 인풋을 받고 4084d0 에 저장합니다. 그리고 그 밑에 함수를 보면 이런부분으로 오는데 4084d0 에 저장된 값을 +1 합니다. 뭐 그렇게 해서 함수가 끝나는듯이 보이고 그 밑에 jmp 로 들어가면 이런곳에 오는데 여기서 F8 을 조금 더 눌러보면 이런 부분에 옵니다. 여기서 에러가 발생하는데 지금 eip 에 있는 부분에 있는 코드를 보면 eax 에 저장된 주소의 가서 NOP 을 채우는것으로 보..
이랬던 문제인뎅.. 푼 사람들이 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() 이런식으로 코드 짜고 실행해 봤더니 엥.... 대회때 조금만 일찍 알았어도 ㅠㅠ