답변
구글이 다시.
NSIS "Can I decompile an existing installer"
짧은 답변 : 아니오.
긴 답 : 7Zip 또는 다른 압축 해제기를 사용하는 것이 가능할 수 있지만 보장이 없으므로 원본 스크립트를 재구성하는 데 많은 시간이 걸릴 수 있습니다.
나는 질문에서 당신이 Windows Installer 데이터베이스로 NSIS 설치 프로그램을 리버스 엔지니어링하려는 가정합니다. 기본적으로 주어진 프로세스 나 설치 프로그램이 만든 상태 변경 사항을 캡처하여 MSI 프로젝트로 변환하는 "Repackagers"라는 상업용 프로그램이 있습니다. 이 프로그램은 NSIS 패키지의 비즈니스 규칙 인스턴스 1 개만 캡처한다는 점에 유의하십시오. 때로는 프로세스를 한 번 더 실행하고 동작 차이를 분석하여 직접 수동으로 작성해야합니다.
http://blog.deploymentengineering.com/2004/12/chriss-rant-about-repackaging.html
가 어떻게 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 마지막으로 나는 압축 해제 지원을 추가했습니다.
또는 ... 설치 프로그램을 만든 개발자에게 몇 가지 팁을 물어 보라.) – Joel
@Eden 사실 Google이 제공하는 첫 번째 링크입니다. 그러나 나는 "Google이 친숙하지 않다"라고 생각한다. – whateverrest