Babel-Buildtask für Nant

Babel ist ein Code-Obfuscator, welchen es unter anderem auch in einer Kostenlosen edition gibt.
Außerdem ist es der einzige mir bekannte (kostenlose), welcher sich als NANT-Task integrieren lässt.

Die NANT DLL lässt sich unter dem Link http://www.babelfor.net/Underground.aspx herunter laden.
Die DLL in der zip einfach in das bin-Verzeichnis von NANT kopieren.

Was Babel jetzt braucht ist nur eine Datei zum einlesen, und ein Pfad wo die fertige (Obsufactorierte) Datei hin soll.

Dies könnte in einem NANT-BuildScript z.B. so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<?xml version="1.0"?>
<project name="Test" default="babel_free" basedir=".">
	<target name="build">
		<solution configuration="release" solutionfile="test.sln"/>
	</target>
 
	<!-- 
		Babel Free Edition:
	-->	
	<fileset id="rules">
		<include name="babelRules.xml" />
	</fileset>
 
	<target name="babel_free" depends="build">
		<babel inputfile="C:\Projekte\test\bin\Release\test.exe"
					 outputfile="C:\Projekte\test\bin\Release\test_babbel.exe"
					 virtualfunctions="true"
					 obfuscatetypes="true"
					 obfuscateevents="true"
					 obfuscatemethods="true"
					 obfuscateproperties="true"
					 obfuscatefields="true"
					 unicodenormalization="true"
					 flattennamespaces="false"
					 stringencryption="true"
					 controlflowobfuscation="true"
					 iliterations="5"
					 emitinvalidopcodes="enhanced"
					 suppressildasm="true">
 
			<rulesfiles refid="rules" />
 
		</babel>
	</target>
</project>

Und in der babelRules.xml steht folgendes drin:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8" ?>
<Rules version="2.0">
    <Rule name="Obfuscate public" exclude="false">
        <Access>Public</Access>
        <Pattern isRegEx="false">*</Pattern>
        <Description>Obfuscate all public symbols.</Description>
    </Rule>
</Rules>

So wird dann im reflector da, wo vorher folgendes angezeigt wurde:

1
2
3
4
5
public string test(int testint)
{
    MessageBox.Show("lala:" + testint.ToString());
    return "OK!";
}

Nur noch dieses angezeigt:

1
2
3
4
public string(int)
{
    // Invalid method body.
}

leave your comment

*

Unterstütze den Frickelblog!