|  |
| |
| cd80 |
쉘코드에 push가 몇갠지 세보셔요 아마 대여섯개정도 있을겁니다 |
2022/05/02 |
|
lMaxl04 |
오. 큰 힌트가 되었습니다.
총 5개고 푸시 할때 esp가 앞으로가니 4바이트씩 5개 20이라는거겠죠? |
2022/05/02 |
|
lMaxl04 |
일단 이해는 됐는데... 어차피 ret으로 쉘코드쪽으로 이동된 이후에는 esp 값이 어떻게되던 상관없다고 생각했는데 아니었나보네요 ㅎㅎ 이 부분은 조금 더 생각해보겠습니다 |
2022/05/02 |
|
lMaxl04 |
음.... 조금 생각해봤는데, 내가 내린 명령 순서로 이동하는게 아니라 쭉 쌓아놓고 한번에 실행한다? 인가요?
그래서 셀코드 내의 값도 스택에 쌓아놓았다가 나중에 esp 주소로 이동하니 push로 변경된 esp로 이동되며 실행하는거. 맞나요? |
2022/05/02 |
|
| cd80 |
gdb로 쉘코드가 실행되면서 push를 할 때 메모리가 어떻게 변하는지 보셔야 이해가 쉬우실거에요
그러면 왜 더미가 특정 바이트 이상 필요한지 알 수 있습니다 |
2022/05/02 |
|
lMaxl04 |
뚫어져라 보다보니 이해했습니다.
이동이 문제가 아니라 쉘코드로 이동 후 push로 인해 이동및 변경된 esp가 쉘코드의 끝부분을 바꿔서 그런것이었네요. 감사합니다 ㅎㅎ |
2022/05/02 |
|
| cd80 |
정확하십니다 |
2022/05/02 |
|
lMaxl04 |
인터럽트님. 질문이 하나 더 있습니다. 예를들어 페이로드를 더미 100 셀코드 30 더미 20으로 두었을때 저는 앞 더미의 값이 nop이어야만 한다고 생각했는데 실제로는 A와 같이 61이 들어가도 셀코드는 실행되더라고요. 이를 기반으로 생각하면 어셈블리어로 인식하지않는 값이면, 정확히는 셀코드에 영향을 주지 않는, push나 pop과 같이 esp를 변경하지 않는 값이면, 셀코드 앞의 더미값으로 활용할 수 있다 라고 봐도 되는건가요? 만약 그렇다면 어셈블리어로 사용되는 값들이 정해져있을텐데 참고할 수 있는 자료가 있나요? |
2022/05/03 |
|
| cd80 |
A가 inc ecx라서 별 문제가 없었던거구요 사용할수 있을만한거는
http://xxeo.com/single-byte-or-small-x86-opcodes
여기서 보시면 될듯합니다.
https://modoocode.com/en/inst/nop
여기는 다양한 길이의 x86 nop이 있네요 |
2022/05/03 |
|
lMaxl04 |
감사합니다! 의문점이 다 해결됐습니다. 말씀하신걸 토대로 x86 operation code를 검색해보았고 http://ref.x86asm.net/coder32.html#x40 여기서 각 번호가 의미하는 명령어를 확인했으며, A에 해당하는 40번대는 말씀하신 것처럼 inc이고 뒤의 값에 따라 레지스터를 선택하게되는 것으로 이해하였습니다. 이를 기준으로 보면 esp에 영향을 주지 않는 오퍼레이션 코드가 모두 사용 가능할 것 같았는데 링크 주신 것처럼 일부만 사용 가능하네요. 이에 대해서는 조금 더 공부해보겠습니다 ㅎㅎ 큰 도움 되었습니다 감사합니다. |
2022/05/03 |
|