목록Study/Reversing (22)
촉촉한초코칩
풀이힌트 링크를 보니 gdb를 사용하라고 되어 있어서 gdb에서 열어보았다. 파일을 실행하면 입력할 틈도 없이 출력되고 끝이 나게 된다. 입력값이 10개라는 건가..? 문장이 10글자..? 방향을 못잡겠어서 블로그 참고.. https://velog.io/@kkangjane/Dreamhack-War-game-small-counterrbp+var_4 값에 따라 Nice, END로 나뉜다. gdb에서 이부분에 break를 걸고 실행해본다. (warning이 뜨면서 동작이 안돼서 다른 방식으로했더니 됐다. -> break 할 때 주소로 입력하지 말고 *main+n으로 입력하기)그리고 해당 값에 5를 넣는다. (5로 인식될 수 있도록)흠 여기가 아닌 것 같다. 다시 5랑 비교하는 부분을 찾아본다. 이제야 이..
문제파일로는 html하나만 주어진다. 코드다 담겨지지도 않는다..우선 submit 버튼에 함수가 있는데, 입력한 값이 같이 전달되어서 찾아보았다. _0x9a220마지막 if문에서 _0x3eebe5의 값과 _0x540d50의 값이 같아야 출력되는 것 같다.... _0x3eebe5만약 _0xceb417이 null이라면, _0x30bf04 값을 _0x4cd335 함수로 호출한다. 먄약 null이 아니라면, _0x169ee3이 false라면, _0x30bf04 값을 _0x42115c 함수로 호출한다. 만약 _0x169ee3이 false라면, null과 _0x30bf04 값을 _0x4fb15f 함수로 호출한다. 1) _0x4cd335 _0x30bf04 에 _0x199598 함수에 보낸다. _0x199598 함..
먼저 chall 파일을 실행해보았다. rand num이 나오고 Input값이 맞아야..? result로 flag가 출력되는 것 같다. 분석1IDA로는 안 열려서 우분투 pwndbg로 분석했다. gdb ./chall disass mainget_rand_num → Random number 출력해주는 부분 같다. 그 뒤로 scanf, printf하는 함수가 나오고 문자열을 비교하는 함수를 발견했다. 저 부분에 break를 걸고 실행하면서 어떻게 비교하고 진행되는지 보았다. break strcmp 입력값을 줘야 하는데 주지 않고 실행하니까 잘 안되는 것 같아서 get_rand_num에 break를 걸고 실행했다. b *0x00005555555553bb이번에는 입력값을 주고 난 후 break가 걸리도록 했다. ..
구조는 rev-basic 이전 문제와 동일하다. 메인 함수를 디컴파일링 해준다. (F5) sub_140001000에서 문자를 비교하는 것 같아서 들어가보았다. i가 28이 될 때까지 반복문을 돌리고if문에 맞으면, 정답인 것 같다.. if문에 저 코드가 뭔지 모르겠어서 gpt에 물어보았다..ㅎㅎ 이 조건문은 a1 포인터와 byte_140003000 배열의 i번째 요소를 비교하는 것입니다. 구체적으로는, a1 + i 주소에서 1바이트 값을 가져와서 두 가지 연산을 수행합니다:가져온 값을 16배하고 8비트 부호 없는 정수로 캐스팅합니다.가져온 값을 8비트 부호 없는 정수로 캐스팅하고, 32비트 정수로 캐스팅한 후 4비트 오른쪽으로 시프트합니다.두 결과를 비트 OR 연산합니다.이 결과가 byte_14000..
코드 (IDA로 열었다.) __security_cookie 부분이 수상해서 들어가보았다. 여기 문자열을 합쳐서 정답으로 입력해보았다.DH{Comp4re_the_arr4y} 정답.. 코드를 세심하게 볼 것...
권한을 주고 실행하니 이런 메시지가 나왔다. 실행파일로 만들어야된다. cat 명령어로 보니 안에 이런 문자들이 있었다.안에도 Usage : 이 부분이 있어서 다음 문자열을 ./prob 실행할 때 같이 넣어줬다.아닌것 같다.. 풀이 찾아보니까 main이 아니라 _start 함수를 통해 시작하는 것 같은데.. 어떻게 찾지 하다가 gcc 명령어로 찾음그리고 해당 에러는 링커 에러라고 한다. 일단 함수 하나는 알아냈으니까 gdb로 분석해보았다.여기서 key 값을 확인하는 것 같다.edx끼리 xor 연산하고 esi의 값을 dl에 넣는다.0x804a10c와 dl을 xor연산하고 edi의 값과 dl을 xor 연산한다.ecx와 edx는 or 연산하고 esi, edi 증가하고 eax는 1 감소시킨다.그리고 0x804..