API Hookingì�„ 통해 Application ì�´í•˜ì�˜ ì°¨ì›�ì—�서 프로그램ì�„ ìž�ìœ ìž�재로 다룰 수 있다는 것ì�„ ë°°ì› ë‹¤.
몇몇 게임(카트ë�¼ì�´ë�”, 워ë¡�, 대í•해시대 등등)ì�˜ 프로그래머들ì�´ Application 층만ì�„ 다룰줄 아는 무ì‹�한 프로그래머ë�¼ëŠ” 것ì�„ 알았다. (특히, 워ë¡�ì�˜ 프로그래머는 프로그래머ë�¼ê¸° 보다 ì½”ë�”ì—� ê°€ê¹�ê³ ë°°ìš´ 것만 쓸 줄 아는 무ì‹�한 바보ì�´ë‹¤. ê·¸ 프로그래머는 개발ìž�로서ì�˜ 수명ì�´ 매우 ì§§ì�„ 것ì�´ë‹¤. 3ë…„ë�„ 못가 짤리거나 혹ì�€ 워ë¡�ì�´ë�¼ëŠ” 게임ì�´ 사ë�¼ì§ˆê±¸?) - (ì�´ 게임들ì�€ 코드를 숨기지 못하게 하는 방법ë�„ 모르는 모양ì�´ë‹¤. ì�´ëŸ°ì‹�으로 게임들ì�„ 건들여 패치를 만들 수 있다. KartRider는 요즘ì—�와서 debug를 불가능하게 í•´ë‘�ê³ ì‹¤í–‰ 파ì�¼ì�„ packing 한 모양ì�´ë‹¤. ë� 그래ë�„ ë§Žì�€ 코드들ì�„ ë”°ë�¼ê°€ì§€ ì•Šê³ ntdll.ZwTerminateProcessì—� BreakPoint를 걸어 앞 함수를 건들ì�´ë©´ 그만ì�´ì§€ë§Œ.)
System Programming� 통해 Application층 프로그래�� 본질� 깨닫기 시작했으며, 가장 중요한 것� Assembly란 것� 다시 한번 깨달았다.
Assembly를 ìž�ìœ ìž�재로 다루지 못하는 프로그래머는 ê·¸ 수명ì�´ 매우 짧다. 아니ë�¼ê³ ? 100ì—� 80~90%는 그럴걸? 나머지 10~20%ì�˜ 프로그래머ë�„ 디버그 ëŠ¥ë ¥ì�€ í˜„ì €ížˆ 떨어질 것ì�´ë‹¤. 디버그 ëŠ¥ë ¥ì�´ ì¢‹ë‹¤ê³ í•´ë�„ Assembly를 ìž�ìœ ìž�재로 다루는 프로그래머를 ê²°ì½” 능가 í• ìˆ˜ 없지.
프로그래머ë�¼ë©´ Codeì�˜ 본질ì�„ 알아야한다. 그것ì�„ ì�´ë£¨ëŠ” 것ì�´ Assemblyì�´ë‹¤. ì�´ê²ƒì�„ 수행하지 않ì�€ 프로그래머는 프로그래머가 아니ë�¼ Coderì�´ë‹¤. Assembly로 íŠ¹ì • 함수를 ë”°ë�¼ë‹¤ë‹ˆë©° ì‹¤ì œë¡œ ì�µížˆëŠ” 방법ì�€ MSDNì—�서 나와있는 것ì�„ 그대로 ë² ë�¼ëŠ” 것보다 í˜„ëª…í• ì§€ 모른다. 프로그래ë°�ì�€ 배우는것ì�´ 아니ë�¼ ì§�ì ‘ Code를 짜보는 것ì�´ë‹¤. MSDNì�„ 보는 것과 debug로 ë”°ë�¼ 가보는 것ì�€ ê·¸ ì°¨ì�´ê°€ í�¬ë‹¤.
프로그래ë°�ì�„ 처ì�Œ ì ‘í•˜ëŠ” 사람으로서는 Assembly어는 무리가 있ì�„ì§€ë�„ 모르나, 약간ì�˜ ì§€ì‹�ì�„ 갖춘 사람ì�€ Assembly어를 ê¼ ë°°ì›Œì•¼í•œë‹¤. Assembly어는 ê²°ì½” 사ë�¼ì§ˆ 수 없는 언어ì�´ë‹¤. ì�´ê²ƒì�€ 매우 중요하며, ì�´ 때문ì—� 대학ì—�서ë�„ ì •ê·œ ê³¼ì •ì†�ì—� í�¬í•¨ë�˜ì–´ 사ë�¼ì§€ì§€ 않는 것ì�´ë‹¤.










