Interface IGenericUnpacker


public interface IGenericUnpacker
Interface for a simple Android APK unpacker that will attempt to gather resources extracted at runtime. An unpacker may be created via an apk unit or a dex decompiler unit.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Start the unpacking process.
    formatMonitorReport(int formatType)
    Retrieve the unpacking report generated by the monitor (if the monitor was enabled before unpacking).
    Create or retrieve the emulator that will perform the unpacking task.
    This method can be used to retrieve the sha256 hashes of the dex files that were collected by the emulator during unpacking.
    This method can be used to retrieve the sha256 hashes of the native library (so) files that were collected by the emulator during unpacking.
    void
    setIntegrateRecoveredDexFiles(boolean integrateRecoveredDexFiles)
    Determine whether the unpacked dex files should be integrated into the primary Dex unit, to allow their use during emulation.
    void
    setMaxExecutionTime(long maxExecutionTime)
    Convenience method to set the maximum emulation time for unpacking.
    void
    setMonitorEvents(boolean monitorEvents)
    Enable or disable the events monitor.
    void
    setUseRecoveredSoFiles(boolean useRecoveredSoFiles)
    Determine whether the unpacked native library (so) files should be analyzed and used during emulation.
    boolean
    This heuristic may be called to determine whether attemptUnpack() has a chance of success.
    void
    This method should be called after a call to attemptUnpack(), when the unpacker and its underlying resources are no longer needed.
  • Method Details

    • shouldAttemptUnpack

      boolean shouldAttemptUnpack()
      This heuristic may be called to determine whether attemptUnpack() has a chance of success. The result of this method should be considered a very loose indicator. If this method is to be used, for better performance, it should be invoked before any other method of this interface.
      Returns:
    • getEmulatedAndroid

      IEmulatedAndroid getEmulatedAndroid()
      Create or retrieve the emulator that will perform the unpacking task. This method may be called before attemptUnpack() to customize the emulator components, or after to retrieve fine-grained emulation results.
      Returns:
    • setMaxExecutionTime

      void setMaxExecutionTime(long maxExecutionTime)
      Convenience method to set the maximum emulation time for unpacking. This method redirects to IDState.setMaxDuration(long).
      Parameters:
      maxExecutionTime - a time in ms
    • setMonitorEvents

      void setMonitorEvents(boolean monitorEvents)
      Enable or disable the events monitor. If the monitor is enabled, a report may be collected after the unpacking process.
      Parameters:
      monitorEvents -
    • setIntegrateRecoveredDexFiles

      void setIntegrateRecoveredDexFiles(boolean integrateRecoveredDexFiles)
      Determine whether the unpacked dex files should be integrated into the primary Dex unit, to allow their use during emulation.
      Parameters:
      integrateRecoveredDexFiles -
    • setUseRecoveredSoFiles

      void setUseRecoveredSoFiles(boolean useRecoveredSoFiles)
      Determine whether the unpacked native library (so) files should be analyzed and used during emulation.
      Parameters:
      useRecoveredSoFiles -
    • getRecoveredDexHashes

      Collection<String> getRecoveredDexHashes()
      This method can be used to retrieve the sha256 hashes of the dex files that were collected by the emulator during unpacking. Note that additional dex units are created as well, as children of the 'unpacked' container unit.
      Returns:
      a collection of sha256 hashes of the recovered dex files
    • getRecoveredSoHashes

      Collection<String> getRecoveredSoHashes()
      This method can be used to retrieve the sha256 hashes of the native library (so) files that were collected by the emulator during unpacking. Note that additional native units are created as well, as children of the 'unpacked' container unit.
      Returns:
      a collection of sha256 hashes of the recovered so files
    • attemptUnpack

      void attemptUnpack() throws DexDecEvaluationException
      Start the unpacking process. This method should be called only once. Customization or results retrieval can be done via getEmulatedAndroid() and #getRecoveredDexFileHashes().
      Throws:
      DexDecEvaluationException
    • formatMonitorReport

      String formatMonitorReport(int formatType)
      Retrieve the unpacking report generated by the monitor (if the monitor was enabled before unpacking).
      Parameters:
      formatType - 0=standard report; 1=short report; 2=detailed report
      Returns:
      the formatted report
    • teardown

      void teardown()
      This method should be called after a call to attemptUnpack(), when the unpacker and its underlying resources are no longer needed.