bin 파일을 C 언어로 변환할 수 있나요?

공식 계정 팔로우 + 별표 , 흥미로운 콘텐츠를 놓치지 마세요

10ec6ac0f13c42a986768085b9c2fc9e.gif

저자 | StrongHuang

WeChat 공개 계정 | StrongHuang

백그라운드에서 한 네티즌의 메시지를 보았습니다. bin 파일을 C 언어로 변환할 수 있는 사람은 누구입니까?

2b0369130981f810c27ab8187ee189a4.png

솔직히 말해서 bin 파일을 C 언어로 변환하는 것은 불가능하다고 생각합니다.변환이 가능하더라도 램프를 켜는 것과 같은 매우 간단한 프로그램입니다.

이전에는 진지하게 공부한 적이 없어서 오늘은 그냥 잠깐 시간을 내어 공부했습니다. Baidu/Google, ChatGPT, 다운로드 도구 확인 등을 포함합니다.

제가 확인한 최종 결과는 bin 파일을 C 언어로 변환하는 것은 거의 불가능하지만 어셈블리로 변환하는 것은 가능하다는 것입니다.

리버스 엔지니어링

bin 파일을 C 언어로 변환하는 작업을 전문적인 의미에서는 리버스 엔지니어링이라고 합니다. 직설적으로 말하면 크래킹이라고 합니다.

이러한 종류의 작업은 일반적으로 하드웨어 플랫폼(예: 단일 칩 마이크로컴퓨터의 특정 모델)과 깊이 결합되며 그 반대는 더 쉽습니다.

PCB 복사판, 칩 복호화 등과 같이 일반적으로 보드 및 카드와 결합된 리버스 엔지니어링을 전문으로 하는 일부 회사를 인터넷에서 찾을 수도 있습니다.

83e64627fefab6d55389e96cae7a0117.png

칩크래킹은 전혀 새로운 현상이 아닙니다. 프로그램(칩)이 나온 이후로 크랙이 발생했고, PCB도 마찬가지입니다. 이런 일은 놀라운 일이 아닙니다.

실제로 크래킹 프로그램이나 복사판을 막론하고 대부분의 경우 크랙이 가능한 제품은 크랙할만한 가치가 없는 경우가 많습니다f9ad2f5bdeb044e912af718c259a4d0e.png

bin 파일을 C 언어로 변환하는 원리

bin 파일을 C 언어로 변환할 수 있는지 여부를 이해하려면 기본 원칙을 이해해야 합니다.

이 질문에 대해 바이두/구글에 물어보니 결과가 나왔지만 만족스러운 답변을 찾지 못했고, 모두 '형식적인' 내용이었습니다.

4fb1ed5f69eb275288b59e435e0acd03.png

그래서 ChatGPT에 다시 문의했는데 꽤 꺼려지는 답변을 받았습니다.

바이너리 파일을 C 언어 코드로 변환하는 프로세스에는 디스어셈블리 및 리버스 엔지니어링 기술이 포함됩니다. 간단한 설명은 다음과 같습니다.

디스어셈블리: 바이너리 파일은 컴퓨터가 직접 실행할 수 있는 명령어인 기계어 코드로 구성됩니다. 분해는 이러한 기계 코드를 해당 조립 지침 형식으로 다시 변환하는 것입니다.

리버스 엔지니어링: 리버스 엔지니어링은 프로그램이나 바이너리를 분석하여 기능, 구조 및 동작을 이해하는 것을 목표로 합니다. 이 예에서는 바이너리 파일에서 해당 C 언어 코드를 추론하려고 합니다.

기호 재구성: 기호 재구성은 바이너리 파일에 있는 함수, 변수 및 기타 데이터 구조와 같은 요소의 의미와 사용법을 식별하고 복원하는 중요한 작업입니다.

제어 흐름 복구(Control flow Recovery): 제어 흐름 복구란 프로그램의 여러 부분 사이의 점프와 흐름을 판단하고 이를 기반으로 함수 호출 관계 그래프를 재구성하는 것을 의미합니다.

의사코드 생성: 마지막 단계에서는 일반적으로 소스 코드 구조를 설명하고 원본 프로그램을 최대한 정확하게 복원하기 위해 C와 유사한(의사코드라고도 함) 표현을 생성합니다.

프로세스가 완전히 자동화되지 않았으며 상당히 복잡하다는 점에 유의하는 것이 중요합니다. 특히 복잡한 바이너리의 경우 결과가 정확하지 않거나 직접 사용 가능하지 않을 수 있습니다. 따라서 실제 응용 프로그램에서 사람들은 일반적으로 더 깊은 리버스 엔지니어링을 위해 수동 분석과 코드 작성을 결합합니다.

f73db5dbd17c8a092b118cf14e42cf53.png

사실, 일반적인 프로세스는 특정 경험이 있는 친구들이 이해할 것이라고 믿습니다. bin 파일을 C 언어로 변환하기 전에 먼저 어셈블리로 변환한 다음 어셈블리에서 C 언어로 변환해야 합니다 .

bin을 어셈블리로 변환하는 난이도는 상대적으로 낮아야 하는데, 컴파일한 뒤 C로 변환하려는 경우 변환이 가능하더라도 변환된 C 코드를 이해할 수 있는 사람이 몇 명이나 될까요?

bin 파일을 C 언어로 변환하는 도구는 무엇입니까?

이해를 돕기 위해 인터넷에서 bin을 C로 변환하는 도구도 찾았습니다.

bin 파일은 바이너리 파일이므로 C 언어 코드로 직접 변환할 수 없습니다. 이를 읽을 수 있는 C 코드로 변환하려면 IDA Pro, OllyDbg 또는 Radare2와 같은 리버스 엔지니어링 도구를 사용해야 합니다.

699bb4351b68b7389891d66592705f95.png

그런데 ChatGPT에 대해서도 물었습니다.

분해 또는 분석에 도움이 되도록 바이너리(.bin) 파일을 C 코드로 변환할 수 있는 여러 도구가 있습니다. 다음은 일반적으로 사용되는 몇 가지 도구입니다.

IDA Pro: 강력한 분해 및 정적 분석 기능을 제공하는 널리 사용되는 리버스 엔지니어링 플랫폼입니다. IDA Pro는 바이너리 파일을 C 의사 코드로 변환하여 소스 코드를 더 쉽게 이해하고 재구성할 수 있습니다.

Ghidra: NSA에서 개발하고 2019년에 출시된 무료 리버스 엔지니어링 프레임워크입니다. Ghidra는 바이너리 파일을 C 언어 코드로 변환하는 것을 지원하며 매우 강력합니다.

Binary Ninja: 이는 고급 분해, 데이터 흐름 분석 및 시각화와 같은 기능을 제공하는 또 다른 인기 있는 리버스 엔지니어링 플랫폼입니다. Binary Ninja는 바이너리 파일을 C 언어 표현으로 변환하는 기능도 지원합니다.

위에 나열된 도구를 올바르게 사용하려면 일정 수준의 기술 지식이 필요하며 결과가 완전히 정확하지 않거나 직접 사용할 수 없을 수도 있습니다. 따라서 민감한 정보를 취급하기 전에 법률 및 규정과 관련 윤리 원칙을 준수하고 법적 라이센스(필요한 경우)가 있는지 확인하십시오.

88f091c25e09333484024d9e06aceb8d.png

또한 실제로 검증하기 위해 널리 사용되는 리버스 엔지니어링 플랫폼인 IDA Pro를 사용해 보았습니다.

eeba719db3e3a370b1eefd39cd2d5112.png

대략적인 결과는 어셈블리를 변환(역)하는 것은 큰 문제가 되지 않으며, C언어로 변환하는 것도 어렵다는 것이다. 그런 종류의 C 언어를 이해하지 못합니다.

따라서 소규모 프로젝트(예: 조명)는 이전할 필요가 없지만 대규모 프로젝트는 이전할 수 없습니다.

좋아, 여기서 공유하자. 제한된 시간과 에너지로 인해 제가 충분히 알지 못할 수도 있고, 옳지 않을 수도 있습니다.

마지막으로 여러분께 묻고 싶습니다. 리버스엔지니어링을 해본 적이 있나요? 토론할 메시지를 남겨주신 것을 환영합니다.

------------   ------------

8a903c97f33fa5e0a3d7f89da2d85f07.gif

●'내장 도구 ' 열

●칼럼 "임베디드 개발"

●칼럼 "Keil Tutorial"

●포함된 컬럼에서 선택된 튜토리얼

규칙에 따라 기술 교류 그룹에 가입하려면 공식 계정에 " Jiagroup "을 회신하고 더 많은 콘텐츠를 보려면 " 1024 "를 회신하십시오.

de09757ce40e427726e5f111574ada50.jpeg

14ae2a38f1e6ea7ac79cb6ccf6a22c1c.png

더 많은 공유 내용을 보려면 " 원문 읽기 "를 클릭하세요.

추천

출처blog.csdn.net/ybhuangfugui/article/details/132353174