PC리버싱/기타

C언어 while연구자료(기타)

Lamed_Dhhd 2020. 6. 6. 10:52
반응형

 

 

 

 

추가설명 while은 반복문인데

while(1) 컴퓨터는 1이참 0이거짓이기떄문에 참일경우를 조건이니 무한반복

while(0)은 절대실행불가능 리버싱 시작

 

 

 

 

이걸 리버싱으로 내부를보자

 

 

 

 

VS 2019기준 main에 BP걸고 간다

 

 

 

 

security cookie등 보안이보이니까 분석을위해 다해제하자

https://dhhd-goldmilk777.tistory.com/149

visual studio 보안해제하기

[GS (Stack Canary/Cookie) 해제법]  프로젝트 속성 -> C/C++ -> 코드 생성 -> 보안 검사 -> 보안 검사 사용 안 함(/GS-) 으로 변경. 함수 프롤로그 이후 스택에 버퍼 할당 전에 랜덤한 값을 Push해 두고, 함수..

dhhd-goldmilk777.tistory.com

이글을 참조해서 보안을해제시키자

 

 

 

 

보안해제후

 

 

 

 

 이걸보면 알겠지만 break는 jne로 반복문을 벗어나게해주는역활이고

항상참이기때문에 jmp라는 분기조건문이 있다

 

 

 

 

분석을위해 위에 반복문을지우고 다시코딩해서 while(0)을분석해보자

 

 

 

 

 

xor eax,eax명령으로 eax값이 0이되면

je로 결국 점프되서 저명령을 실행되지않는다

while(0)의원리

 

 

while(1)의원리

 

 



총정리
while(1)은 jmp를이용한 무한반복
while(0)은
xor eax,eax //이문장은 eax를 0으로만든다
je 문으로 실행불가능
++정보
break는 반복문 이반복되기전
조건확인후 분기조건문으로 탈출

 

추가연구

 

 

이렇게 1이아니라도 0이아니면 무한반복이되는데 코드를보면

 

 

-1의경우는이렇고이렇다 

 

 

2의경우는 이렇다

반응형