2010-08-07 2 views

답변

5

구글이 다시.

NSIS "Can I decompile an existing installer"

짧은 답변 : 아니오.

긴 답 : 7Zip 또는 다른 압축 해제기를 사용하는 것이 가능할 수 있지만 보장이 없으므로 원본 스크립트를 재구성하는 데 많은 시간이 걸릴 수 있습니다.

+0

@Eden 사실 Google이 제공하는 첫 번째 링크입니다. 그러나 나는 "Google이 친숙하지 않다"라고 생각한다. – whateverrest

2

나는 질문에서 당신이 Windows Installer 데이터베이스로 NSIS 설치 프로그램을 리버스 엔지니어링하려는 가정합니다. 기본적으로 주어진 프로세스 나 설치 프로그램이 만든 상태 변경 사항을 캡처하여 MSI 프로젝트로 변환하는 "Repackagers"라는 상업용 프로그램이 있습니다. 이 프로그램은 NSIS 패키지의 비즈니스 규칙 인스턴스 1 개만 캡처한다는 점에 유의하십시오. 때로는 프로세스를 한 번 더 실행하고 동작 차이를 분석하여 직접 수동으로 작성해야합니다.

http://blog.deploymentengineering.com/2004/12/chriss-rant-about-repackaging.html

5

가 어떻게 NSIS 설치 스크립트에 액세스 할 수 :

나는 거의 6 년 전 대한 블로그를 쓴?

해당 게시물의 큰 주제입니다.

http://netcologne.dl.sourceforge.net/project/nsis/NSIS%202/2.09/nsis-2.09-src.tar.bz2

NSIS-2.09-SRC \ 소스 \ exehead \
NSIS-2.09-의 src \ 소스 fileform.c \ exehead \ fileform.h

#define FH_SIG 0xDEADBEEF 

// neato surprise signature that goes in firstheader. :) 
#define FH_INT1 0x6C6C754E // 'Null' 
#define FH_INT2 0x74666F73 // 'soft' 
#define FH_INT3 0x74736E49 // 'Inst' 

typedef struct 
{ 
    int flags; // FH_FLAGS_* 
    int siginfo; // FH_SIG 

    int nsinst[3]; // FH_INT1,FH_INT2,FH_INT3 

    // these point to the header+sections+entries+stringtable in the datablock 
    int length_of_header; 

    // this specifies the length of all the data (including the firstheader and CRC) 
    int length_of_all_following_data; 
} firstheader; 

데이터 샘플 :

$ ==> 00000000 .... 
$+4 DEADBEEF 
$+8 6C6C754E Null 
$+C 74666F73 soft 
$+10 74736E49 Inst 
$+14 000268E2   157 922 length_of_header (inside <<Compressed Data>>) 
$+18 011947CB   18 433 995 length_of_all_following_data 
     <<Compressed Data>> 

$+011947CB CRC32 

받기 < < 압축 된 데이터 > > Uncompr essed

그럼이 데이터는 % temp % 에 기록되지만 ShareMode = None 및 Attributes = DELETE_ON_CLOSE로 설정하면 액세스 할 수 없습니다. 좋아

Fix: 
    Inside 'NSIS Setup.exe' 
Replace 
    68 00 01 00 04 with 
    68 00 00 00 00 
    To avoid that this tempfile get's create with DELETE_ON_CLOSE 

Background: 

    00402E56 |. 68 00010004 PUSH 4000100       ; |Attributes = TEMPORARY|DELETE_ON_CLOSE 
        ^^^^^^^^^^^-Patch Target 
    00402E5B |. 6A 02   PUSH 2        ; |Mode = CREATE_ALWAYS 
    00402E5D |. 53   PUSH EBX        ; |pSecurity 
    00402E5E |. 53   PUSH EBX        ; |ShareMode 
    00402E65 |. 68 000000C0 PUSH C0000000       ; |Access = GENERIC_READ|GENERIC_WRITE 
    00402E6A |. 50   PUSH EAX        ; |FileName 
    00402E6B |. FF15 90704000 CALL [<&KERNEL32.CreateFileA>]  ; \CreateFileA 

큰 <는> 비 압축 임시 파일은 다음과 같이 시작되는 :

00000000 E2 68 02 00 A0 00 00 00 2C 01 00 00 08 00 00 00 2C âh   ,  , 

E2 68 02 00에게 -> 000268E2 157 922 length_of_header을 (< 내부>)

그냥이 데이터 블록을 잘라 그리고 압축되지 않은 NSIS 스크립트를 가지고 있어야합니다. Raw

나머지 데이터는 7z가 추출 할 데이터 파일입니다.

업데이트 : 리스팅 Universal Extractor

이 플러그인

cmdTotal 1.02 (c) 2006/2007 KaKeeware, http://www.kakeeware.com 

사용 InstExpl.wcx

이 더 많거나 적은 성공적으로 널 소프트 Setup.exe를 추출 할 수 있습니다. 추출 된 파일을 많이 신뢰하지 않도록주의하십시오. 손상된 부분이 있습니다. (이에 대한 7zip 선호) 그러나 그 절차의 가장 중요한 것은 스크립트입니다 .bin 좋은 모양으로 테스트 한 3-4 예에 해당했습니다. :) 갱신

좋아요 : 는 여기 그러나 여기 많이 개발 아직도 그것의 첫번째 원시 미완성 버전의 순간 내 NullsoftDecompiler 1.2 alpha

의 정말 초기 버전입니다.

UPDATE (약 년 이상) : NullsoftDecompiler 3 Decompiled output from nsiDecomp in Notepad++ 마지막으로 나는 압축 해제 지원을 추가했습니다.

+0

또는 ... 설치 프로그램을 만든 개발자에게 몇 가지 팁을 물어 보라.) – Joel