Restore the png Image in the ipa of the iOS installation package to a normal image.

Source: Internet
Author: User
Tags crc32 normalizer unpack

Http://www.axelbrz.com.ar /? Mod = iphone-png-images-normalizer

Niu Ren wrote a python script to restore the png Image in the iOS program.

Script: ipin. py

Usage:

1. Put ipin.pyin the directory of the .png image to be restored.

2. Open the terminal and run cd to this directory.

3. Input python ipin. py

4. Enter Y as prompted and press Enter. In this way, you can restore the image to view it.

#---# iPIN - iPhone PNG Images Normalizer v1.0# Copyright (C) 2007## Author:#  Axel E. Brzostowski#  http://www.axelbrz.com.ar/#  axelbrz@gmail.com# # References:#  http://iphone.fiveforty.net/wiki/index.php/PNG_Images#  http://www.libpng.org/pub/png/spec/1.2/PNG-Contents.html# # This program is free software: you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation, either version 3 of the License.# # This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.# #---from struct import *from zlib import *import statimport sysimport osdef getNormalizedPNG(filename):    pngheader = "\x89PNG\r\n\x1a\n"        file = open(filename, "rb")    oldPNG = file.read()    file.close()    if oldPNG[:8] != pngheader:        return None        newPNG = oldPNG[:8]        chunkPos = len(newPNG)        # For each chunk in the PNG file    while chunkPos < len(oldPNG):                # Reading chunk        chunkLength = oldPNG[chunkPos:chunkPos+4]        chunkLength = unpack(">L", chunkLength)[0]        chunkType = oldPNG[chunkPos+4 : chunkPos+8]        chunkData = oldPNG[chunkPos+8:chunkPos+8+chunkLength]        chunkCRC = oldPNG[chunkPos+chunkLength+8:chunkPos+chunkLength+12]        chunkCRC = unpack(">L", chunkCRC)[0]        chunkPos += chunkLength + 12        # Parsing the header chunk        if chunkType == "IHDR":            width = unpack(">L", chunkData[0:4])[0]            height = unpack(">L", chunkData[4:8])[0]        # Parsing the image chunk        if chunkType == "IDAT":            try:                # Uncompressing the image chunk                bufSize = width * height * 4 + height                chunkData = decompress( chunkData, -8, bufSize)                            except Exception, e:                # The PNG image is normalized                return None            # Swapping red & blue bytes for each pixel            newdata = ""            for y in xrange(height):                i = len(newdata)                newdata += chunkData[i]                for x in xrange(width):                    i = len(newdata)                    newdata += chunkData[i+2]                    newdata += chunkData[i+1]                    newdata += chunkData[i+0]                    newdata += chunkData[i+3]            # Compressing the image chunk            chunkData = newdata            chunkData = compress( chunkData )            chunkLength = len( chunkData )            chunkCRC = crc32(chunkType)            chunkCRC = crc32(chunkData, chunkCRC)            chunkCRC = (chunkCRC + 0x100000000) % 0x100000000        # Removing CgBI chunk         if chunkType != "CgBI":            newPNG += pack(">L", chunkLength)            newPNG += chunkType            if chunkLength > 0:                newPNG += chunkData            newPNG += pack(">L", chunkCRC)        # Stopping the PNG file parsing        if chunkType == "IEND":            break            return newPNGdef updatePNG(filename):    data = getNormalizedPNG(filename)    if data != None:        file = open(filename, "wb")        file.write(data)        file.close()        return True    return datadef getFiles(base):    global _dirs    global _pngs    if base == ".":        _dirs = []        _pngs = []            if base in _dirs:        return    files = os.listdir(base)    for  file in files:        filepath = os.path.join(base, file)        try:            st = os.lstat(filepath)        except os.error:            continue                if stat.S_ISDIR(st.st_mode):            if not filepath in _dirs:                getFiles(filepath)                _dirs.append( filepath )                        elif file[-4:].lower() == ".png":            if not filepath in _pngs:                _pngs.append( filepath )                if base == ".":        return _dirs, _pngsprint "-----------------------------------"print " iPhone PNG Images Normalizer v1.0"print "-----------------------------------"print " "print "[+] Searching PNG files...",dirs, pngs = getFiles(".")print "ok"if len(pngs) == 0:    print " "    print "[!] Alert: There are no PNG files found. Move this python file to the folder that contains the PNG files to normalize."    exit()    print " "print " -  %d PNG files were found at this folder (and subfolders)." % len(pngs)print " "while True:    normalize = raw_input("[?] Do you want to normalize all images (Y/N)? ").lower()    if len(normalize) > 0 and (normalize[0] == "y" or normalize[0] == "n"):        breaknormalized = 0if normalize[0] == "y":    for  ipng in xrange(len(pngs)):        perc = (float(ipng) / len(pngs)) * 100.0        print "%.2f%% %s" % (perc, pngs[ipng])        if updatePNG(pngs[ipng]):            normalized += 1print " "print "[+] %d PNG files were normalized." % normalized

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.