Skip to content

Commit 06bb16e

Browse files
committed
Rework documentation
Move demo further up Fix demo image link Rewording
1 parent 4b5dc30 commit 06bb16e

File tree

1 file changed

+28
-27
lines changed

1 file changed

+28
-27
lines changed

README.md

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ PreEmptive Protection for iOS - Rename
22
===========================================
33
*PreEmptive Protection for iOS - Rename*, or *PPiOS-Rename* for short, is a command-line utility for obfuscating Objective-C class, protocol, property, and methods names, in iOS apps. It is a fork of [iOS-Class-Guard](https://github.com/Polidea/ios-class-guard) from [Polidea](https://www.polidea.com/), with extensive improvements and modifications.
44

5-
*PPiOS-Rename* can be used on its own or alongside [PreEmptive Protection for iOS - Control Flow](https://www.preemptive.com/products/ppios), [PreEmptive Solutions](https://www.preemptive.com/)' product for control-flow obfuscation of iOS apps.
6-
75
*PPiOS-Rename* works by generating a special set of `#define` statements (e.g. `#define createArray y09FYzLXv7T`) that automatically rename symbols during compilation. It includes a number of features:
86

97
* Analyze a Mach-O binary to identify symbols to be renamed
@@ -13,6 +11,8 @@ PreEmptive Protection for iOS - Rename
1311

1412
*PPiOS-Rename* works with more than just your project's code. It also automatically finds symbols to exclude from renaming by looking at all external/dependent frameworks and in Core Data (xcdatamodel) files. The renamed symbols will also be applied to your XIB/Storyboard files, and to any open-source CocoaPods libraries in your project.
1513

14+
[PreEmptive Solutions](https://www.preemptive.com/) also offers another product, [PreEmptive Protection for iOS - Control Flow](https://www.preemptive.com/products/ppios), that includes additional obfuscation transforms. *PPiOS-Rename* is meant to work alongside *PPiOS-ControlFlow*; together they provide much better protection than either one alone can provide.
15+
1616
*PPiOS-Rename* is licensed under the GNU GPL v2, but commercial support is also available from [PreEmptive Solutions](https://www.preemptive.com/contact/contactus) via a commercial support agreement. Please see LICENSE.txt for details.
1717

1818
> DEVELOPER NOTE: This fork includes a substantial rewrite of the git history, to fix [a corrupted commit in the original repo](https://github.com/nygard/class-dump/commit/509591f78f37905913ba0cbd832e5e4f7b925a8a). More details are in [the changelog](CHANGELOG.md).
@@ -151,10 +151,35 @@ If you modify the original build target or scheme, be sure to delete and recreat
151151

152152
Using PPiOS-Rename with PPiOS-ControlFlow
153153
-------------------------
154-
*PreEmptive Protection for iOS - Rename* (*PPiOS-Rename)* provides the "renaming" obfuscation, which is the most-common type of obfuscation typically applied to applications to help protect them from reverse engineering, intellectual property theft, software piracy, tampering, and data loss. There are additional obfuscation techniques, however, that are critically important for serious protection of apps. [PreEmptive Solutions](https://www.preemptive.com/) offers another product, named [PreEmptive Protection for iOS - Control Flow](https://www.preemptive.com/products/ppios), that includes multiple additional obfuscation transforms. *PPiOS-Rename* is meant to work alongside *PPiOS-ControlFlow*; together they provide much better protection than either one alone can provide.
154+
*PreEmptive Protection for iOS - Rename* (*PPiOS-Rename)* provides the "renaming" obfuscation, which is the most-common type of obfuscation typically applied to applications to help protect them from reverse engineering, intellectual property theft, software piracy, tampering, and data loss. There are additional obfuscation techniques, however, that are critically important for serious protection of apps. [PreEmptive Solutions](https://www.preemptive.com/) offers another product, [PreEmptive Protection for iOS - Control Flow](https://www.preemptive.com/products/ppios), that includes additional obfuscation transforms. *PPiOS-Rename* is meant to work alongside *PPiOS-ControlFlow*; together they provide much better protection than either one alone can provide.
155155

156156
If you have both *PPiOS-rename* and *PPiOS-ControlFlow*, no special instructions are required for using them together. Set each one up according to its documentation, and they will each perform their obfuscation without affecting the other.
157157

158+
159+
Demonstration
160+
-------------------
161+
162+
Below is a demonstration of the effects of applying obfuscation. The optimized binary was reverse engineered using [Hopper](http://www.hopperapp.com/) with no debugging symbols. This is a realistic example of what an attacker would see using reverse engineering tools.
163+
164+
Original code:
165+
166+
<img width="350" alt="original-sized" src="https://raw.githubusercontent.com/preemptive/PPiOS-Rename/master/images/original-sized.png">
167+
168+
Reverse engineered code: (what an attacker would see)
169+
170+
<img width="350" alt="unobfuscated-sized" src="https://raw.githubusercontent.com/preemptive/PPiOS-Rename/master/images/unobfuscated-sized.png">
171+
172+
Reverse engineered code with PPiOS-Rename:
173+
174+
<img width="350" alt="renamed-sized" src="https://raw.githubusercontent.com/preemptive/PPiOS-Rename/master/images/renamed-sized.png">
175+
176+
Reverse engineered code with both PPiOS-Rename and PPiOS-ControlFlow:
177+
178+
<img width="350" alt="controlflow-sized" src="https://raw.githubusercontent.com/preemptive/PPiOS-Rename/master/images/controlflow-sized.png">
179+
180+
As seen, the code is relatively straight forward to understand with no obfuscation. It's not obvious after applying PPiOS-Rename obfuscation, but the logic could still be inferred by the system framework methods being used. And finally, it's extremely difficult to understand the logic in the last version with PPiOS-ControlFlow obfuscation. The decompiled code was actually significantly longer than shown here.
181+
182+
158183
Troubleshooting
159184
---------------
160185

@@ -334,30 +359,6 @@ Note that `nm` will not work properly after stripping symbols from your binary.
334359
The resulting dSYM file can be uploaded to e.g. HockeyApp.
335360

336361

337-
Demonstration
338-
-------------------
339-
340-
Below is a demonstration of the effects of applying obfuscation. The optimized binary was reverse engineered using Hopper with no debugging symbols. This is a realistic example of what an attacker would see using reverse engineering tools.
341-
342-
Original code:
343-
344-
<img width="350" alt="original-sized" src="https://raw.githubusercontent.com/preemptive/PPiOS-Rename/master/images/original-sized.png">
345-
346-
Reverse engineered code: (what an attacker would see)
347-
348-
<img width="350" alt="unobfuscated-sized" src="https://raw.githubusercontent.com/preemptive/PPiOS-Rename/master/images/unobfuscated-sized.png">
349-
350-
Reverse engineered code with PPiOS-Rename:
351-
352-
<img width="350" alt="renamed-sized" src="https://raw.githubusercontent.com/preemptive/PPiOS-Rename/master/images/renamed-sized.png">
353-
354-
Reverse engineered code with both PPiOS-Rename and PPiOS-ControlFlow:
355-
356-
<img width="350" alt="controlflow-sized" src="https://raw.githubusercontent.com/preemptive/PPiOS-Rename/master/images/controlflow-sized-sized.png">
357-
358-
As seen, the code is relatively straight forward to understand with no obfuscation. It's not obvious after applying PPiOS-Rename obfuscation, but the logic could still be inferred by the system framework methods being used. And finally, it's extremely difficult to understand the logic in the last version with PPiOS-ControlFlow obfuscation. The decompiled code was actually significantly longer than shown here.
359-
360-
361362
Command Line Argument Reference
362363
-------------------------------
363364
```

0 commit comments

Comments
 (0)