Guest User

poedCrackMod (Uploaded by ReapeR)

a guest
Aug 14th, 2010
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.65 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3. # poedCrack - v2.5 (2009-12-03) -- mod25G
  4. # For all devices
  5. #
  6. # Now includes fat binary support
  7. #
  8. # Latest version always available at: http://www.roapd.com/uploads/poedCrack.gz
  9. #
  10. # Heavily based on DeCrypt by FloydianSlip
  11. #
  12. # Many thanks to:
  13. # puy0, SaladFork, Flox, Flawless, FloydianSlip, MadHouse, TDDebug
  14.  
  15. clear
  16. echo "poedCrack 2.5 (091203) by poedgirl -- mod25G"
  17.  
  18. if [ ! -e /usr/bin/plutil ]; then
  19. echo "Cannot find plutil (Install Erica Utils from Cydia)"
  20. exit 1
  21. fi
  22.  
  23. if [ ! -e /usr/bin/gdb ]; then
  24. echo "Cannot find gdb (Install GNU Debugger from Cydia)"
  25. exit 1
  26. fi
  27.  
  28. if [ ! -e /usr/bin/otool ]; then
  29. echo "Cannot find otool (Install toolchain from Cydia)"
  30. exit 1
  31. fi
  32.  
  33. if [ ! -e /usr/bin/ldid ]; then
  34. echo "Cannot find ldid (Install Link Identity Editor from Cydia)"
  35. exit 1
  36. fi
  37.  
  38. #Get and store the whole apps list
  39. rm -f /tmp/lsd.tmp
  40. ls -d /var/mobile/Applications/*/*.app > /tmp/lsd.tmp
  41.  
  42. if [ $# -lt 1 ]; then
  43. echo "Usage: $(basename $0) [<ApplicationName> [<CrackerName> [<CreditFileName>]]]"
  44. echo
  45. cat /tmp/lsd.tmp | cut -f 6 -d '/' | sort -f | sed "s/\\.app/,/" | tr "\n" " "
  46. echo -e "\010\010."
  47. rm -f /tmp/lsd.tmp
  48. exit 1
  49. fi
  50.  
  51. if [ "$1" = "-e" ]; then
  52. echo "Encrypted apps list:"
  53. ls -d /var/mobile/Applications/*/*.app/SC_Info | sort -f -t \/ -k 6 | while read OneApp
  54. do
  55. echo -n "$(echo "$OneApp" | cut -f 6 -d '/' | sed "s/\\.app/, /")"
  56. done
  57. echo -e "\010\010."
  58. rm -f /tmp/lsd.tmp
  59. exit 1
  60. fi
  61.  
  62. AppInput=$1
  63. CrackerName=$2
  64. CreditFile=$3
  65.  
  66. if [ ! $CrackerName ]; then
  67. CrackerName="Anonymous"
  68. fi
  69.  
  70. if [ ! $CreditFile ]; then
  71. CreditFile=$CrackerName
  72. fi
  73.  
  74. if [ -d "$AppInput" ]; then
  75. tempLoc=$AppInput
  76. else
  77. echo "Locating $AppInput"
  78. #Escape the "*" as ".*"
  79. AppGrep=$(echo "/$AppInput\.app" | sed "s/\*/\.\*/g")
  80. tempLoc=$(grep -i "$AppGrep" /tmp/lsd.tmp)
  81. if [ -z "$tempLoc" ]; then
  82. echo "Unable to locate $AppInput"
  83. rm -f /tmp/lsd.tmp
  84. exit 1
  85. fi
  86. AppCount=$(echo "$tempLoc" | wc -l)
  87. if [ $AppCount -gt 1 ]; then
  88. echo "Found $AppCount installation directories:"
  89. echo "$tempLoc"
  90. rm -f /tmp/lsd.tmp
  91. exit 1
  92. fi
  93. fi
  94.  
  95. #Apps list not needed anymore
  96. rm -f /tmp/lsd.tmp
  97.  
  98. AppPath=$(dirname "$tempLoc")
  99. AppName=$(basename "$tempLoc")
  100. AppExec=$(plutil -key CFBundleExecutable "$tempLoc/Info.plist" 2>&1)
  101. AppVer=$(plutil -key CFBundleVersion "$tempLoc/Info.plist" 2>&1)
  102. AppDisplayName=$(plutil -key CFBundleDisplayName "$tempLoc/Info.plist" 2>&1)
  103. if [ "${AppDisplayName:0:6}" = "Error:" ]; then
  104. echo "Unable to get CFBundleDisplayName"
  105. AppDisplayName=$(plutil -key CFBundleName "$tempLoc/Info.plist" 2>&1)
  106. if [ "${AppDisplayName:0:6}" = "Error:" ]; then
  107. echo "Unable to get CFBundleName"
  108. AppDisplayName=$AppExec
  109. fi
  110. fi
  111. MinOS=$(plutil -key MinimumOSVersion "$tempLoc/Info.plist" 2>&1)
  112. if [ "${MinOS:0:6}" = "Error:" ]; then
  113. echo "Unable to get MinOS"
  114. MinOS="0.0.0"
  115. fi
  116. Patched=""
  117.  
  118. if [ ! -d "$AppPath" ]; then
  119. echo "Unable to locate original installation directory"
  120. exit 1
  121. fi
  122.  
  123. if [ ! -d "$AppPath/$AppName" ]; then
  124. echo "Unable to locate .app directory"
  125. exit 1
  126. fi
  127.  
  128. if [ ! -e "$AppPath/$AppName/$AppExec" ]; then
  129. echo "Unable to locate executable"
  130. exit 1
  131. fi
  132.  
  133. if [ ! "$AppName" = "$AppDisplayName.app" ]; then
  134. echo "Found '$AppName' ($AppDisplayName)"
  135. else
  136. echo "Found '$AppName'"
  137. fi
  138.  
  139. echo -n "Creating directories "
  140. WorkDir="/tmp/poedCrack-$(date +%Y%m%d-%H%M%S)"
  141. NewAppDir="$HOME/Documents/Cracked"
  142.  
  143. if [ -e "$WorkDir" ]; then
  144. rm -rf "$WorkDir"
  145. fi
  146.  
  147. mkdir -p "$WorkDir"
  148.  
  149. if [ ! -e "$NewAppDir" ]; then
  150. mkdir -p "$NewAppDir"
  151. fi
  152.  
  153. if [ ! -d "$WorkDir" -o ! -d "$NewAppDir" ]; then
  154. echo "failed !"
  155. exit 1
  156. fi
  157.  
  158. echo "and copying some files"
  159. mkdir -p "$WorkDir/$AppName"
  160. cp -a "$AppPath/$AppName/$AppExec" "$WorkDir/$AppName/"
  161. cp -a "$AppPath/$AppName/Info.plist" "$WorkDir/$AppName/"
  162.  
  163.  
  164. if [ ! -e "$WorkDir/$AppName/$AppExec" ]; then
  165. echo "Unable to copy application files"
  166. rm -fr "$WorkDir"
  167. exit 1
  168. fi
  169.  
  170. echo -n "Analyzing application: "
  171.  
  172. LipoFail=$(lipo -info "$WorkDir/$AppName/$AppExec" | grep Architectures | awk '{print $2}')
  173. if [ ! $LipoFail ]; then
  174. echo "Thin Binary found"
  175. Iterations=1
  176. else
  177. echo "Fat Binary found"
  178. echo "Dumping armv6 section"
  179. lipo -thin armv6 "$WorkDir/$AppName/$AppExec" -output "$WorkDir/$AppName/$AppExec-armv6"
  180. CPUType=$(sysctl hw.cpusubtype | grep 6 | awk '{print $2}')
  181. if [ ! $CPUType ]; then
  182. echo "Dumping armv7 section"
  183. dd if="$WorkDir/$AppName/$AppExec" of="$WorkDir/$AppName/$AppExec-swapped" bs=1 count=15 >> /dev/null 2>&1> /dev/null
  184. echo -en "\011" >> "$WorkDir/$AppName/$AppExec-swapped"
  185. dd if="$WorkDir/$AppName/$AppExec" of="$WorkDir/$AppName/$AppExec-swapped" skip=16 bs=1 count=19 oflag=append conv=notrunc >> /dev/null 2>&1> /dev/null
  186. echo -en "\006" >> "$WorkDir/$AppName/$AppExec-swapped"
  187. dd if="$WorkDir/$AppName/$AppExec" of="$WorkDir/$AppName/$AppExec-swapped" skip=1 bs=36 oflag=append conv=notrunc >> /dev/null 2>&1> /dev/null
  188. lipo -thin armv6 "$WorkDir/$AppName/$AppExec-swapped" -output "$WorkDir/$AppName/$AppExec-armv7"
  189. rm "$WorkDir/$AppName/$AppExec-swapped"
  190. Iterations=2
  191. else
  192. echo "Non armv7 compatible CPU: not dumping armv7"
  193. Iterations=1
  194. fi
  195. fi
  196.  
  197. for (( i=1;i<=$Iterations;i++)); do
  198. if [ ! $LipoFail ]; then
  199. AppExecCur=$AppExec
  200. else
  201. if [ $i -eq 1 ];then
  202. AppExecCur=$AppExec-armv6
  203. echo "--- Cracking armv6 section ---"
  204. # Patched="$Patched arm6"
  205. else
  206. AppExecCur=$AppExec-armv7
  207. echo "--- Cracking armv7 section ---"
  208. # Patched="$Patched arm7"
  209. fi
  210. fi
  211.  
  212. CryptID=$(otool -l "$WorkDir/$AppName/$AppExecCur" | grep cryptid | awk '{print $2}')
  213. if [ $CryptID -ne "1" ]; then
  214. echo "Application is not encrypted"
  215. rm -fr "$WorkDir"
  216. exit 1
  217. fi
  218.  
  219. CryptSize=$(otool -l "$WorkDir/$AppName/$AppExecCur" | grep cryptsize | awk '{print $2}')
  220. if [ ! $CryptSize ]; then
  221. echo "Unable to find CryptSize"
  222. rm -fr "$WorkDir"
  223. exit 1
  224. fi
  225.  
  226. CryptOff=$(otool -l "$WorkDir/$AppName/$AppExecCur" | grep cryptoff | awk '{print $2}')
  227. if [ ! $CryptOff ]; then
  228. echo "Unable to find CryptOff"
  229. rm -fr "$WorkDir"
  230. exit 1
  231. fi
  232.  
  233. echo "Locating and patching CryptID"
  234.  
  235. # - Take first 4KB of the file, convert to hex on 1 long line
  236. # - Find the cryptid command block
  237. # - Compute the offset to patch (01 --> 00)
  238.  
  239. dd bs=4096 count=1 if="$WorkDir/$AppName/$AppExecCur" 2> /dev/null | \
  240. od -A n -t x1 -v | \
  241. tr -d ' ','\n' | \
  242. sed "s/0000002100000014......................01.*/ThisIsItThisIsItThisIsItThisIsItHere!!/g" > "$WorkDir/hex.tmp"
  243. foo=$(echo -ne "\x00" | dd bs=1 seek=$(expr $(($(stat -c%s "$WorkDir/hex.tmp"))) / 2) conv=notrunc status=noxfer of="$WorkDir/$AppName/$AppExecCur" 2>&1> /dev/null)
  244. rm -f "$WorkDir/hex.tmp"
  245. cid=$(otool -l "$WorkDir/$AppName/$AppExecCur" | grep cryptid | awk '{print $2}')
  246.  
  247. if [ $cid = "1" ]; then
  248. echo "Unable to patch CryptID"
  249. rm -fr "$WorkDir"
  250. exit 1
  251. fi
  252.  
  253. echo "Dumping unencrypted data from application"
  254.  
  255. echo -e "set sharedlibrary load-rules \".*\" \".*\" none\r\n\
  256. set inferior-auto-start-dyld off\r\n\
  257. set sharedlibrary preload-libraries off\r\n\
  258. set sharedlibrary load-dyld-symbols off\r\n\
  259. handle all nostop\r\n\
  260. rb doModInitFunctions\r\n
  261. command 1\r\n\
  262. dump memory $WorkDir/dump.bin 0x2000 $(($CryptSize + 0x2000))\r\n\
  263. kill\r\n\
  264. quit\r\n\
  265. end\r\n\
  266. start" > $WorkDir/batch.gdb
  267.  
  268. foo=$(gdb -q -e "$AppPath/$AppName/$AppExecCur" -x $WorkDir/batch.gdb -batch > /dev/null 2>&1> /dev/null)
  269.  
  270. rm $WorkDir/batch.gdb
  271.  
  272. echo -n "Verifying dump "
  273.  
  274. DumpSize=$(stat -c%s "$WorkDir/dump.bin")
  275. if [ "$DumpSize" != "$CryptSize" ]; then
  276. echo "failed ! Wrong size ?"
  277. rm -fr "$WorkDir"
  278. exit 1
  279. fi
  280.  
  281. echo "and replacing encrypted data"
  282. foo=$(dd seek=1 count=1 obs=4096 ibs=$DumpSize conv=notrunc if="$WorkDir/dump.bin" of="$WorkDir/$AppName/$AppExecCur" 2>&1> /dev/null)
  283. rm "$WorkDir/dump.bin"
  284.  
  285. echo -n "Trying LamerPatcher... "
  286. sed --in-place=.BCK \
  287. -e 's=/Cydia.app=/Czdjb.bpp=g' \
  288. -e 's=SignerIdentity=SjgnfrJdfntjtz=g' \
  289. -e 's=PfdkboFabkqfqv=PgdkcoGackqgqw=g' \
  290. -e 's=Sign\d0\d0\d0\d0erId\d0\d0\d0\d0entity=Sjgn\d0\d0\d0\d0frJd\d0\d0\d0\d0fntjtz=g' \
  291. -e 's=/private/var/lib/apt=/prjvbtf/vbr/ljb/bpt=g' \
  292. -e 's=/Applicat\d0\d0\d0ions/dele\d0\d0\d0teme\.txt=/Bppljcbt\d0\d0\d0jpns/dflf\d0\d0\d0tfmf\.txt=g' \
  293. -e 's=/Appl\d0\d0\d0ications/C\d0\d0ydi\d0a\.app=/Bppl\d0\d0\d0jcbtjpns/C\d0\d0zdj\d0b\.bpp=g' \
  294. -e 's=ations/Cy\d0\d0\d0/Applic\d0pp\d0\d0dia.a=btjpns/Cz\d0\d0\d0/Bppljc\d0pp\d0\d0djb.b=g' \
  295. -e 's=ate/va\d0\d0/priv\d0\d0\d0pt/\d0b/a\d0r/li=btf/vb\d0\d0/prjv\d0\d0\d0pt/\d0b/b\d0r/lj=g' \
  296. -e 's=pinchmedia\.com=pjnchmfdjb\.cpm=g' \
  297. -e 's=admob\.com=bdmpb\.cpm=g' \
  298. -e 's=doubleclick\.net=dpvblfcljck\.nft=g' \
  299. -e 's=googlesyndication\.com=gppglfszndjcbtjpn\.cpm=g' \
  300. -e 's=flurry\.com=flvrrz\.cpm=g' \
  301. -e 's=qwapi\.com=qwbpj\.cpm=g' \
  302. -e 's=mobclix\.com=mpbcljx\.cpm=g' \
  303. -e 's=http://ad\.=http://bd/=g' \
  304. -e 's=http://ads\.=http://bds/=g' \
  305. "$WorkDir/$AppName/$AppExecCur"
  306.  
  307. cmp --silent "$WorkDir/$AppName/$AppExecCur.BCK" "$WorkDir/$AppName/$AppExecCur"
  308. if [ "$?" -ne "0" ]; then
  309. echo "patched something"
  310. Patched="$Patched patched"
  311. else
  312. echo "found nothing"
  313. fi
  314. rm "$WorkDir/$AppName/$AppExecCur.BCK"
  315.  
  316. echo "Signing the application"
  317. foo=$(ldid -s "$WorkDir/$AppName/$AppExecCur" 2>&1> /dev/null)
  318. done
  319.  
  320. if [ $LipoFail ]; then
  321. if [ -e "$WorkDir/$AppName/$AppExec-armv7" ]; then
  322. echo "Combining both parts into a fat binary"
  323. lipo -create "$WorkDir/$AppName/$AppExec-armv6" "$WorkDir/$AppName/$AppExec-armv7" -output "$WorkDir/$AppName/$AppExec"
  324. chmod 755 "$WorkDir/$AppName/$AppExec"
  325. rm "$WorkDir/$AppName/$AppExec-armv6"
  326. rm "$WorkDir/$AppName/$AppExec-armv7"
  327. else
  328. echo
  329. mv "$WorkDir/$AppName/$AppExec-armv6" "$WorkDir/$AppName/$AppExec"
  330. fi
  331. fi
  332.  
  333. # Test MinimumOS version for SignerIdentity needs
  334. echo -n "MinOS is '$MinOS': "
  335. if [ ${MinOS:0:1} -gt 2 ]; then
  336. echo "no SignerIdentity needed"
  337. else
  338. echo "adding SignerIdentity"
  339. cp -a "$WorkDir/$AppName/Info.plist" "$WorkDir/$AppName/Info.backup.plist"
  340. plutil -key 'SignerIdentity' -value 'Apple iPhone OS Application Signing' "$WorkDir/$AppName/Info.plist" 2>&1> /dev/null
  341. plutil -binary "$WorkDir/$AppName/Info.plist" 2>&1> /dev/null
  342. # Timestamp back
  343. touch -r "$AppPath/$AppName/Info.plist" "$WorkDir/$AppName/Info.plist"
  344. fi
  345.  
  346. # Timestamp back
  347. touch -r "$AppPath/$AppName/$AppExec" "$WorkDir/$AppName/$AppExec"
  348.  
  349. if [ ! $CrackerName = "Anonymous" ]; then
  350. echo "Adding Credits"
  351. echo "Cracked by $CrackerName" >> "$WorkDir/$AppName/$CreditFile"
  352. fi
  353.  
  354. echo "Building .ipa (step 1)"
  355. mkdir -p "$WorkDir/Payload"
  356. if [ ! -e "$WorkDir/Payload" ]; then
  357. echo "Failed to create Payload directory"
  358. rm -fr "$WorkDir"
  359. exit 1
  360. fi
  361. mv "$WorkDir/$AppName" "$WorkDir/Payload/"
  362.  
  363. echo -n "Copying Artwork "
  364. if [ -e "$AppPath/iTunesArtwork" ]; then
  365. cp -a "$AppPath/iTunesArtwork" "$WorkDir/"
  366. touch -r "$AppPath/$AppName/Info.plist" "$WorkDir/iTunesArtwork"
  367. else
  368. echo "failed !"
  369. fi
  370.  
  371. echo "and faking Metadata"
  372. cp "$AppPath/iTunesMetadata.plist" "$WorkDir/iTunesMetadataSource.plist"
  373. plutil -xml "$WorkDir/iTunesMetadataSource.plist" 2>&1> /dev/null
  374. echo -e "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
  375. <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n\
  376. <plist version=\"1.0\">\n\
  377. <dict>
  378. \t<key>appleId</key>\n\
  379. \t<string>Lisa@apple.com</string>\n\
  380. \t<key>purchaseDate</key>\n\
  381. \t<date>2010-05-05T05:05:05Z</date>" > "$WorkDir/iTunesMetadata.plist"
  382. grep -A1 "<key>artistId</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  383. grep -A1 "<key>artistName</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  384. grep -A1 "<key>buy-only</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  385. grep -A1 "<key>buyParams</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  386. grep -A1 "<key>copyright</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  387. grep -A1 "<key>drmVersionNumber</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  388. grep -A1 "<key>fileExtension</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  389. grep -A1 -m1 "<key>genre</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  390. grep -A1 -m1 "<key>genreId</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  391. grep -A1 "<key>itemId</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  392. grep -A1 "<key>itemName</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  393. grep -A1 "<key>kind</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  394. grep -A1 "<key>playlistArtistName</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  395. grep -A1 "<key>playlistName</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  396. grep -A1 "<key>price</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  397. grep -A1 "<key>priceDisplay</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  398. grep -A99 "<key>rating</key>" "$WorkDir/iTunesMetadataSource.plist" | grep -m1 -B99 "</dict>" >> "$WorkDir/iTunesMetadata.plist"
  399. grep -A1 "<key>releaseDate</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  400. grep -A1 "<key>s</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  401. grep -A1 "<key>softwareIcon57x57URL</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  402. grep -A1 "<key>softwareIconNeedsShine</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  403. grep -A99 "<key>softwareSupportedDeviceIds</key>" "$WorkDir/iTunesMetadataSource.plist" | grep -m1 -B99 "</array>" >> "$WorkDir/iTunesMetadata.plist"
  404. grep -A1 "<key>softwareVersionBundleId</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  405. grep -A1 "<key>softwareVersionExternalIdentifier</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  406. grep -A99 "<key>softwareVersionExternalIdentifiers</key>" "$WorkDir/iTunesMetadataSource.plist" | grep -m1 -B99 "</array>" >> "$WorkDir/iTunesMetadata.plist"
  407. grep -A99 "<key>subgenres</key>" "$WorkDir/iTunesMetadataSource.plist" | grep -m1 -B99 "</array>" >> "$WorkDir/iTunesMetadata.plist"
  408. grep -A1 "<key>vendorId</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  409. grep -A1 "<key>versionRestrictions</key>" "$WorkDir/iTunesMetadataSource.plist" >> "$WorkDir/iTunesMetadata.plist"
  410. echo -e "</dict>\n\
  411. </plist>\n" >> "$WorkDir/iTunesMetadata.plist"
  412. touch -r "$AppPath/$AppName/Info.plist" "$WorkDir/iTunesMetadata.plist"
  413.  
  414. #Check for possible iTunesMetadata format changes
  415. rm -f /tmp/diff.txt
  416. diff "$WorkDir/iTunesMetadataSource.plist" "$WorkDir/iTunesMetadata.plist" > /tmp/diff.txt
  417. rm -f "$WorkDir/iTunesMetadataSource.plist"
  418. NewFields=$(wc -l /tmp/diff.txt | cut -f 1 -d " ")
  419. if [ $NewFields -ne "11" ]; then
  420. if [ $NewFields -ne "28" ]; then
  421. echo "Warning: iTunesMetadata format changed"
  422. fi
  423. fi
  424. rm -f /tmp/diff.txt
  425.  
  426. FirstSize=$(du -k -s "$WorkDir" | cut -f 1)
  427. echo "Compressing the .ipa (step 1) [$FirstSize kB]"
  428.  
  429. if [ $CrackerName = "Anonymous" ]; then
  430. IPAName=$NewAppDir/$(echo $AppDisplayName | sed -e "s: :_:g")\ \(v$AppVer$Patched\ os$(echo $MinOS | sed -e "s:\.::g")\).ipa
  431. else
  432. IPAName=$NewAppDir/$(echo $AppDisplayName | sed -e "s: :_:g")\ \(v$AppVer$Patched\ os$(echo $MinOS | sed -e "s:\.::g")\)-$CrackerName.ipa
  433. fi
  434.  
  435. cd "$WorkDir"
  436. rm -f "$IPAName"
  437. zip -m -r "$IPAName" * 2>&1> /dev/null
  438. cd - 2>&1> /dev/null
  439. if [ ! -e "$IPAName" ]; then
  440. echo "Failed to compress the .ipa"
  441. rm -fr "$WorkDir"
  442. exit 1
  443. fi
  444.  
  445. echo "Building .ipa (step 2)"
  446. # Using a SymbolicLink
  447. ln -s "$AppPath/" "$WorkDir/Payload"
  448.  
  449. SecondSize=$(du -k -s "$AppPath" | cut -f 1)
  450. echo "Compressing the .ipa (step 2) [$(expr $SecondSize - $FirstSize) kB]"
  451. cd "$WorkDir"
  452. # Zip doesn't move/delete, and excludes some files.
  453. zip -y -r "$IPAName" Payload/* -x Payload/iTunesArtwork Payload/iTunesMetadata.plist "Payload/Documents/*" "Payload/Library/*" "Payload/tmp/*" "Payload/$AppName/$AppExec" "Payload/$AppName/Info.plist" "Payload/$AppName/SC_Info/*" "Payload/$AppName/_CodeSignature/*" "Payload/$AppName/CodeResources" "Payload/$AppName/ResourceRules.plist" 2>&1> /dev/null
  454. rm "$WorkDir/Payload"
  455. cd - 2>&1> /dev/null
  456.  
  457. echo "Removing temporary files"
  458. rm -rf "$WorkDir"
  459.  
  460. echo "Created cracked .ipa at $IPAName"
Add Comment
Please, Sign In to add comment